带有部分类的MVC模型的序列化将不起作用

时间:2019-04-17 16:10:27

标签: asp.net-mvc razor

我整天都经历过带有嵌套属性(特别是数组)和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)

我希望创建一个简单的项目可以清除我的疑惑,看看我在真实项目中做错了什么,但是没有运气...我在做什么错了?

谢谢 enter image description here

1 个答案:

答案 0 :(得分:1)

您可以在modelview之间更改映射。

要映射您的输入名称,必须跟随名称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"/>
}