如何使用视图中的对象列表呈现模型?

时间:2017-12-28 13:27:09

标签: c# asp.net-mvc asp.net-mvc-4 model

我需要在带有模型的视图中显示特定表单。模型就是这样:

这是我需要的最终对象:

public class ObjetTotal
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string Numero { get; set; }
        public string Value { get; set; }
    }

我选择将表单分成两个不同的部分:

  • 首先是"静态"用户可以为不同的ObjetsTotal设置公共值的部分。
  • 第二个"变量"用户为不同的ObjetsTotal。
  • 放置不同值的部分

最终目标是用户必须为所有对象ObjetTotal键入相同的内容。

所以,我创建了其他对象(我不知道它是否是一个好习惯),它代表了表单的不同部分。

MainObjet的静态部分和Numbers的变量部分。我把这两个对象放到另一个对象中#34; Mix"其中包含一个" MainObjet"和#34;数字"。

的列表
public class MainObjet
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

public class Numbers
{
    public string Numero { get; set; }
    public string Value { get; set; }
}

public class Mix
{
    public MainObjet obj { get; set; }
    public IEnumerable<Numbers> num { get; set; }

    public Mix()
    {
       obj = new MainObjet();
       num = new List<Numbers>();
    }
}

然后我想在视图中渲染模型Mix以获得表单的两个部分。

我试过这个:

@model App.Models.Mix

@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
    <legend>Mix</legend>

    <h3>First Properties</h3>
    <div>
        @Html.TextBoxFor(model => model.obj.Id);
        @Html.TextBoxFor(model => model.obj.Name);
        @Html.TextBoxFor(model => model.obj.Description);
    </div>
    <div>
        <table>
            @for (int i = 0; i < 5; i++)
            { 
                <tr>
                    <td>
                        @Html.TextBoxFor(model => model.num[i].Numero)
                    </td>
                    <td>
                        @Html.TextBoxFor(model => model.num[i].Value)
                    </td>
                </tr>
            }
        </table>
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}

Viewtest

但是在提交之后,我在这个ActionResult中得到一个对象Mix null:

[HttpPost]
public ActionResult Test(Mix obj)
{
    return View();
}

你能解释一下如何做到这一点吗?我可能走错了路。

不要考虑表单的设计,而且我也不知道为Numbers添加正确的类型,也许一个简单的列表就足够了。

1 个答案:

答案 0 :(得分:0)

我能看到的是你在无参数构造函数中缺少模型属性的初始化。您应该尝试将模型代码更新为:

public class Mix
{
    public MainObjet obj { get; set; }
    public IEnumerable<Numbers> num { get; set; }

    public Mix()
    {
        obj = new MainObjet();
        num = new List<Numbers>();
    }
}

由于模型绑定器将实例化您的模型,它会找到objnumnull,并且无法将值发回。

希望这会对你有所帮助。