2011-03-25 24 views
4

我是新来的asp。 我必须在mvc中编写一个应用程序,其中有一个数据库,我有两个表。 一张桌子父与桌子儿童一对多地实现。ASP MVC如何创建具有子元素的模型的编辑器?

Parent 
------------- 
parent_id 
name 


Children 
------------- 
children_id 
parent_id (foreign key) 
name 

当用户想要为父表创建一个元素时,编辑器必须有机会添加(创建)子元素。

当用户编辑Parent时,他应该有机会删除/编辑子项。

没有可能在separete编辑

添加/编辑/删除儿童,我想我sholuld使用JavaScript来生成儿童进一步控制。我可以做到这一点,但我不知道如何将这个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

如果我正确理解你的模型,你需要

// 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); 
+0

是的,你是对的,这是一个拼写错误。但这不是问题。我从视图 - >模型的方式有问题。 – nosbor 2011-03-25 18:50:18

+0

也许发布你的控制器代码会有帮助。通常情况下,视图与模型没有直接关系。所有的交互都会发生在控制器中。 – 2011-03-25 18:58:50

相关问题