我整天都经历过带有嵌套属性(特别是数组)和MVC的序列化问题。
我创建了一个简单的代码来向您显示简化代码。我以为我只是谷歌搜索,甚至试图将Items[0].Id
用作html helper的名称。
通过这种方式-代码*也许您可以为我提供一个有效且干净的解决方案。
@using (Ajax.BeginForm("Salva", "Home", new AjaxOptions(){ HttpMethod = "POST"}))
{
<div class="row">
@for (int i = 0; i < Model.Items.Length; i++)
{
@Html.Partial("_Item", Model.Items[i])
}
</div>
<input value="click" type="submit"/>
}
模型
namespace WebApplication2.Models
{
public class SomeClass
{
public Internal[] Items { get; set; }
}
public class Internal
{
public DateTime? Date { get; set; }
public int Id { get; set; }
}
}
这是控制器
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new SomeClass();
var lst = new List<Internal>();
for (int i = 0; i < 3; i++)
{
lst.Add(new Internal{Id = i});
}
model.Items = lst.ToArray();
return View(model);
}
[HttpPost]
public ActionResult Salva(SomeClass model)
{
return Json(true);
}
}
这是_Item.cshtml
@model namespace.Internal
Html.TextFor(m=>m.Date)
我希望创建一个简单的项目可以清除我的疑惑,看看我在真实项目中做错了什么,但是没有运气...我在做什么错了?
答案 0 :(得分:1)
您可以在model
和view
之间更改映射。
要映射您的输入名称,必须跟随名称someClass.Items[" + ViewBag.Index + "].Date
[HttpPost]
public ActionResult Salva(SomeClass someClass)
{
return Json(true);
}
在_Item.cshtml
@model WebApplication1.Controllers.Internal
@Html.TextBoxFor(m => m.Date, htmlAttributes : new { Name = "someClass.Items[" + ViewBag.Index + "].Date" })
在Index.cshtml
@using (Ajax.BeginForm("Salva", "Users", new AjaxOptions(){ HttpMethod = "POST"}))
{
<div class="row">
@for (int i = 0; i < Model.Items.Length; i++)
{
ViewBag.Index = i;
@Html.Partial("_Item", Model.Items[i])
}
</div>
<input value="click" type="submit"/>
}