C# 从asp.net mvc 3表单中的强类型视图收集数据
我知道这看起来是一个很容易找到答案的问题,但我发现了许多关于如何从controller发送数据并在视图中显示数据的文章,并且没有明确的方法来收集/使用控制器中提交的数据 这是我的设置: 我使用visual studio为mvc项目创建的默认结构,因此在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()
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