我需要在带有模型的视图中显示特定表单。模型就是这样:
这是我需要的最终对象:
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; }
}
我选择将表单分成两个不同的部分:
最终目标是用户必须为所有对象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>
}
但是在提交之后,我在这个ActionResult中得到一个对象Mix null:
[HttpPost]
public ActionResult Test(Mix obj)
{
return View();
}
你能解释一下如何做到这一点吗?我可能走错了路。
不要考虑表单的设计,而且我也不知道为Numbers添加正确的类型,也许一个简单的列表就足够了。
答案 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>();
}
}
由于模型绑定器将实例化您的模型,它会找到obj
和num
到null
,并且无法将值发回。
希望这会对你有所帮助。