我有这个模型有另一个模型的列表。然后在我看来,我的表格为我的主模型填充了几个字段。但我希望这种形式也能够添加其他类型的X模型,并且都是有线的,我想知道如何正确地做到这一点。具有模型列表的模型的MVC客户端验证
因此,这里有我的两个型号:
public class MyMainModel
{
public int MyMainId { get; set; }
[Required(ErrorMessage = "Groovy name required")]
[Display(Name = "MyMainModel's groovy name:")]
public string Name { get; set; }
public List<MySubModel> MySubModels { get; set; }
}
public class MySubModel
{
public int MySubId { get; set; }
[Required(ErrorMessage = "Cool name required")]
[Display(Name = "MySubModel's cool name:")]
public string Name { get; set; }
}
当我打我的控制器,我的“创造”的看法,我通过这个动作:
public ActionResult SomePageAboutCreating()
{
// [...] Some other stuff
return View(new MyMainModel());
}
现在这个发送到我的强类型查看:
@model myFunProject.WebModels.MyMainModel
<div>
<form id="my-create-form" onsubmit="CreateMyMainModel(this); return false;">
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<div class="result" style="background-color: silver;">This is the operation result box</div>
<img class="loading" src="/Images/ajax-loader.gif" alt="Loading..." width="16" height="16" style="display: none;" />
<section>
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
@Html.ValidationMessageFor(m => m.Name)
</section>
<!-- Here begins the fields for my list of "MySubModel" -->
@Html.EditorFor(x => x.MySubModels)
<!-- Here I'm thinking about a javascript that will add the previous fields X times so that the user can create "MyMainModel" as well as x times "MySubModel"... -->
<input type="submit" class="btn-send" id="my-create-form-submit" value="Send" />
</form>
</div>
所以我想我必须在这里使用EditorTemplates ...所以我安装在我的/ Views/EditorTemplates/MySub Models.cshtml(命名反对我“MyMainModel”的属性),然后当我写我的形式在那里,我很困惑...
@model myFunProject.WebModels.MyMainModel
@*<section>
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
@Html.ValidationMessageFor(m => m.Name)
</section>*@
所以在这里我不知道要放什么东西在这里...我希望我的名称属性是“MySubModel”之一。当用户看到这个表单时,比如说他会经历这种情况:
- 输入“MyMainModel”的名称。
- 转到其他人的名字框和在“MySubModel的第一个实例的名称罢了。
- 然后,他会点击一个特殊的按钮,将操作DOM追加另一MySubModel.Name场。
- 他会写在第二个“MySubModel”的名字。
- 他会点击提交。
AJAX调用我摆在那里我确定做配线,但我的困惑带有我编写的代码编辑器模板,然后我有点想知道我将如何创建一个新的领域(第二个“MySubModel”例如...)。
任何帮助将不胜感激,我已经通过了许多关于这个主题的文章,但还没有发现这种情况。谢谢!
编辑:
我会添加动作(过于简化的版本,嘿嘿)由我的阿贾克斯提交表单时调用。
public ActionResult CreateMyMainModel(MyMainModel myMainModel) {
// [...] Do stuff like save to database...
// var aGroovyNAme = myMainModel.Name;
foreach(var mySubModel in myMainModel.MySubModels) {
// Here I would have the sub models available to manipulate...
// var aCoolName = mySubModel.Name;
}
return Content("ok");
}
的[ASP.Net MVC4绑定“创建视图”到包含列表中选择模型]可能的复制(http://stackoverflow.com/questions/12974957/asp-net-mvc4-bind-a-create-view-to-a-model-that-contains-list) – halfer 2016-02-14 21:36:49
我已经添加了一个dup建议基于来自@Savantes的回答。 – halfer 2016-02-14 21:37:09