Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从asp.net mvc 3表单中的强类型视图收集数据_C#_Asp.net Mvc 3_Razor - Fatal编程技术网

C# 从asp.net mvc 3表单中的强类型视图收集数据

C# 从asp.net mvc 3表单中的强类型视图收集数据,c#,asp.net-mvc-3,razor,C#,Asp.net Mvc 3,Razor,我知道这看起来是一个很容易找到答案的问题,但我发现了许多关于如何从controller发送数据并在视图中显示数据的文章,并且没有明确的方法来收集/使用控制器中提交的数据 这是我的设置: 我使用visual studio为mvc项目创建的默认结构,因此在HomeController中,我将索引更改为: public class HomeController : Controller { public ActionResult Index()

我知道这看起来是一个很容易找到答案的问题,但我发现了许多关于如何从controller发送数据并在视图中显示数据的文章,并且没有明确的方法来收集/使用控制器中提交的数据

这是我的设置:

我使用visual studio为mvc项目创建的默认结构,因此在
HomeController
中,我将索引更改为:

    public class HomeController : Controller
        {
            public ActionResult Index()
            {
                ViewBag.Message = "Create table";
                var model = new List<Auction>();
                model.Add(new Auction
                {
                    Title = "First Title",
                    Description = "First Description"
                });
                model.Add(new Auction
                {
                    Title = "Second Title",
                    Description = "Second Description"
                });
                model.Add(new Auction
                {
                    Title = "Third Title",
                    Description = "Third Description"
                });
                model.Add(new Auction
                {
                    Title = "Fourht Title",
                    Description = "Fourth Description"
                });

                return View(model);
            }

I just hard coded some data so I can play around with it.

then this is my Index view :

@model List<Ebuy.Website.Models.Auction>

@{
    ViewBag.Title = "Home Page";
}


@using (Html.BeginForm())
{
    <table border="1" >
        @for (var i = 0; i < Model.Count(); i++)
        {
            <tr>
                <td>
                    @Html.HiddenFor(x => x[i].Id)
                    @Html.DisplayFor(x => x[i].Title)
                </td>
                <td>
                    @Html.EditorFor(x => x[i].Description)
                </td>
            </tr>
        }
    </table>

    <button type="submit">Save</button>
}
看来没那么容易。我得到这个错误:


[InvalidOperationException:传入字典的模型项类型为'Ebuy.Website.Models.Auction',但此字典需要'System.Collections.Generic.List'类型的模型项。
1[Ebuy.Website.Models.Auction]'.

您需要将视图中的类型从
List
更改为
Auction
。由于您只传递了
拍卖
,并且您的视图的模型类型为
列表
,因此会抛出此错误。我的猜测是,当您使用值列表对其进行测试时,您在视图中的模型类型为通用列表,但您稍后将您的操作转换为返回拍卖,但没有更改您的视图

从中更改视图中的模型

@model List<Ebuy.Website.Models.Auction>

您需要将视图中的类型从
列表
更改为
拍卖
。由于您只传递了
拍卖
,并且您的视图的模型类型为
列表
,因此会抛出此错误。我的猜测是,当您使用值列表对其进行测试时,您在视图中的模型类型为通用列表,但您稍后将您的操作转换为返回拍卖,但没有更改您的视图

从中更改视图中的模型

@model List<Ebuy.Website.Models.Auction>

我没有故意做任何事。我的意思是-我希望我的视图接受拍卖列表,因为正如您在我的逻辑中所看到的,我迭代了这个列表来填充我的表。所以我需要这个列表。所以我需要把@model留给List,有没有建议如何通过这种方式发回?所以你想让你的观点既接受List,也接受拍卖,对吗?您在第二个HTTPPost索引中做什么?在控制器中回答后,我将索引方法更改为:
[HTTPPost]公共操作结果索引(列表模型){var test=model;返回视图(model);}
通过这种方式更改控制器不会产生错误,但单击提交按钮也不会进入我的[HttpPost]索引方法。这是因为您的提交按钮没有发回列表,因此找不到匹配的操作。。。你可以试试这个…``public ActionResult Index(拍卖模型){var test=new List;test.Add(模型);return View(测试);}我并不是故意这么做的。我的意思是-我希望我的视图接受拍卖列表,因为正如您在我的逻辑中所看到的,我迭代了这个列表来填充我的表。所以我需要这个列表。所以我需要把@model留给List,有没有建议如何通过这种方式发回?所以你想让你的观点既接受List,也接受拍卖,对吗?您在第二个HTTPPost索引中做什么?在控制器中回答后,我将索引方法更改为:
[HTTPPost]公共操作结果索引(列表模型){var test=model;返回视图(model);}
通过这种方式更改控制器不会产生错误,但单击提交按钮也不会进入我的[HttpPost]索引方法。这是因为您的提交按钮没有发回列表,因此找不到匹配的操作。。。您可以改为尝试…``public ActionResult Index(拍卖模型){var test=new List;test.Add(模型);return View(测试);}
@model Ebuy.Website.Models.Auction