use*_*329 3 asp.net-mvc asp.net-mvc-3 asp.net-mvc-4
我目前希望用户更新数据列表并能够将其提交回来。用户正在更新的数据是类似的数据,目前它是一些文本框。他们更新信息并将其提交回来。
目前我已经创建了以下 viewModel
public class Name
{
public int Id { get; set; }
public string FullName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这将保存数据。所以从控制器我现在正在嘲笑数据
public ActionResult Index()
{
var listOfNames = new List<Name>();
var name1 = new Name();
name1.Id = 1;
name1.FullName = "Test Name1";
var name2 = new Name();
name2.Id = 2;
name2.FullName = "Test Name2";
var name3 = new Name();
name3.Id = 3;
name3.FullName = "Test Name3";
var name4 = new Name();
name4.Id = 4;
name4.FullName = "Test Name4";
listOfNames.Add(name1);
listOfNames.Add(name2);
listOfNames.Add(name3);
listOfNames.Add(name4);
return View(listOfNames);
}
Run Code Online (Sandbox Code Playgroud)
然后视图如下所示,
@model IEnumerable<MvcApplication1.Models.Name>
@using (Html.BeginForm())
{
foreach (var item in Model)
{
@Html.TextBox("namevalues", item.FullName, new { id = "name" + item.Id, data_id = item.Id})
<br />
}
<input type="submit" />
}
Run Code Online (Sandbox Code Playgroud)
当用户提交数据时,我希望重新填充视图模型,以便我应该能够执行以下操作
[HttpPost]
public ActionResult Index(IEnumerable<Name> names)
{
return View("index", names);
}
Run Code Online (Sandbox Code Playgroud)
我是否需要使用 javascript 将信息实际整理在一起然后传递?还是有一些我不知道的 MVC 魔法?
不,你不需要 JavaScript。您可以使用可以绑定到视图的视图模型。我不喜欢将域模型传递给视图,我更喜欢在数据方面缩小得多的视图模型。它可以是这样的:
public class NameListViewModel
{
public List<Name> Names { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在您需要在控制器中填充名称列表,如下所示:
public ActionResult Index()
{
NameListViewModel viewModel = new NameListViewModel();
viewModel.Names = new List<Name>();
viewModel.Names.Add(new Name { Id = 1, FullName = "Test Name1" });
viewModel.Names.Add(new Name { Id = 2, FullName = "Test Name2" });
viewModel.Names.Add(new Name { Id = 3, FullName = "Test Name3" });
viewModel.Names.Add(new Name { Id = 4, FullName = "Test Name4" });
return View(viewModel);
}
[HttpPost]
public ActionResult Index(NameListViewModel viewModel)
{
// All the values should still be in viewModel
// Do whatever you need to do
}
Run Code Online (Sandbox Code Playgroud)
然后在您的视图中,您可以使用如下文本框数组:
@model YourProject.ViewModels.Names.NameListViewModel
@for (int i = 0; i < Model.Names.Count(); i++)
{
<div>
@Html.TextBoxFor(x => x.Names[i].FullName)
@Html.HiddenFor(x => x.Names[i].FullName)
</div>
}
Run Code Online (Sandbox Code Playgroud)
尝试一下,看看是否有效。修改代码以适合您的场景并执行您需要的其余操作。
我希望这有帮助。