MVC5 Asp.net有没有办法从EditorFor获取子类

时间:2015-10-12 20:46:47

标签: asp.net-mvc asp.net-mvc-5

我有一个班级

public class Citizen
{
    public long ID { get; set; }
    public string Name { get; set; }
    public long CityID { get; set; }
    public string City { get; set; }
    public List<CitizenResource> Resources { get; set; }
}

我想在参考资料中编辑单个项目,但EditorFor没有正确设置输入。

@for (int i = 0; i < Model.Resources.Count; i++ )
{ 
    @Html.BeginForm("EditResource", "Citizen")
    {
        @Html.AntiForgeryToken()
        <div class="form-horizontal">
            <div class="form-group">
                <p class="form-control-static">
                    @Html.DisplayFor(model => model.Resources[i].Name)
                </p>
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Resources[i].CurrentAmount, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.Resources[i].CurrentAmount, "", new { @class = "text-danger" })
                    <input type="hidden" name="ResourceID" value="@Model.Resources[i].ResourceID"/>
                    <input type="submit" value="Update" class="btn btn-default" />
                </div>
            </div>
        </div>
     }
}

我得到的是name =&#34; Resources [0] .CurrentAmount&#34;然后,它没有正确映射到CitizenResource类。

任何人都可以帮我指出正确的方向吗?

2 个答案:

答案 0 :(得分:0)

您的代码正在创建多个不好的表单。处理这种情况的最佳方法是使用EditorTemplates。查看此链接,了解如何操作。 EditorFor() for a List of Complex Type (MVC)

答案 1 :(得分:0)

您发送的表达式会导致该名称:

  

我得到的是name =“Resources [0] .CurrentAmount”,然后不映射   正确到CitizenResource类。

@Html.EditorFor(model => model.Resources[i].CurrentAmount, new { htmlAttributes = new { @class = "form-control" } })

而是有一个部分视图来编辑CitizenResource

@model CitizenResource

@using(Html.BeginForm("EditResource", "Citizen")){
            {
//The complete elements
@Html.EditorFor(model => model.CurrentAmount, new { htmlAttributes = new { @class = "form-control" } })
//The rest of the elements
}}