我是asp的新手。 我必须在mvc中编写一个应用程序,它有一个数据库,我有两个表。 一个表Parent与表Children一对一地被实现。
Parent
-------------
parent_id
name
Children
-------------
children_id
parent_id (foreign key)
name
当用户想要为Parent表创建元素时,编辑器必须有机会添加(创建)Children。
当用户编辑Parent时,他应该有机会删除/编辑子项。
无法在separete编辑器中添加/编辑/删除子项
我想我sholuld使用javascript为Child生成进一步的控件。我可以这样做,但我不知道如何将这个html控件映射到模型?
我写了这个观点:
<script language="javascript" type="text/javascript">
function add_child() {
$('#children').append($('<input name="child[' + ++$('#children>input').get().length + ']" />'));
}
</script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Create Parent</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div>Children:</div>
<div id="children">
@Html.TextBox("child[1]")
</div>
<div>
<input onclick="add_child()" type="button" />
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
这很好用。但我真的不知道如何在我的父模型上映射这个元素。
现在我的创建视图模型如下所示:
public class ParentModel {
public ParentModel() {
Children = //... get all children from database
}
public string Name { get; set; }
// this should be an ids of selected children
public string[] SelectedChildren { get; set; }
// children to display
public ICollection<ChildModel> Children { get; set; }
}
public class ChildModel {
public string Name { get; set; }
}
如何通过视图中的值填充此子项?
控制器:
public class ParentController : Controller
{
// show form
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index() {
ParentModel model = new ParentModel();
return View(model);
}
// Get Parent and Children
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(ParentModel form) {
// I want to read a form.CreatedChildren
// but it is Null
return View();
}
}
我想阅读一个form.CreatedChildren,但它是空的......
答案 0 :(得分:5)
您可以结帐following blog post。关于验证的followup。
答案 1 :(得分:0)
如果我正确理解您的模型,您需要
// children to display
public ICollection<ChildModel> Children { get; set; }
在您的父模型中。在ParentModel构造函数中
Children = new HashSet<ChildModel>();
至于使用数据填充模型,它属于您的控制器。类似的东西:
var parents = from p in context.ParentModels
select p;
Return View(parents);