2014-05-09 51 views
0

我想将项目发布到属于另一个模型的集合。 这是在视图的形式:将项目添加到虚拟集合ASP.NET MVC

@using (Html.BeginForm("Create", "Comment", FormMethod.Post, new { enctype = "multipart/form-data", encoding = "multipart/form-data" })) 
      { 
       @Html.AntiForgeryToken() 
       <div class="modal-body"> 
        <div class="form-horizontal"> 
         <input type="hidden" value="@Model.DeviceID" /> 
         <div class="form-group"> 
          <h5>Your name</h5> 
          <div class="col-md-10"> 
           <input name="Author" /> 
          </div> 
         </div> 
         <div class="form-group"> 
          <h5>Comment</h5> 
          <div class="col-md-10"> 
           <textarea name="Comment"></textarea> 
          </div> 
         </div> 
        </div> 
       </div> 
       <div class="modal-footer"> 

        <input type="submit" class="btn btn-primary" value="Submit" /> <!--Next</input>--> 
       </div> 
      } 

和控制器代码设置如下

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create(string returnUrl, int devID, string Author, string text) 
    { 
     string url = this.Request.UrlReferrer.AbsolutePath; 

     Comment comment = new Comment(); 

     if (ModelState.IsValid) 
     { 
      //db.Comments.Add(comment); 
      db.SaveChanges(); 
      return Redirect(url); 
     } 
     return Redirect(url); 
    } 

但是这并不工作,因为我不能设置,这是获得发布项目的模型ID 。

什么是Asp.net MVC添加到模型拥有的虚拟集合的方式?

+1

您的Create动作的所有参数来自哪里?作者是唯一一个在表单中具有相应的文本框的人。我发现你在隐藏的输入上设置DeviceId,但它甚至没有名字。 –

+0

前段时间我有同样的问题。最终,我终于把ID放在一个可见的只读输入中,该输入位于用户看不到的地方。无法记住它是放置在屏幕的“外部”,还是放在其他元素的后面。这是一个丑陋的解决方案,但是完成这项工作。这也是不安全的,但那是管理页面。 –

回答

1

我注意到名称在你的控制器中不匹配。所以你不好好检索它。 第一更改此行:

<input name="Author" /> and <textarea name="Comment"></textarea> 

通过:

<input name="author" /> and <textarea name="comments"></textarea> 

你能不能更改参数的名称从视图相匹配。

public ActionResult Create(string returnUrl, int DeviceID, string author, string comments) 
{ 
    string url = this.Request.UrlReferrer.AbsolutePath; 

    Comment myComment = new Comment(); 
    comment.DeviceID = DeviceID; 
    comment.Author = author; 
    comment.Comments= comments;// I presume your Comment class has thoses properties if not you can see at least the way you can deal with that 
    if (ModelState.IsValid) 
    { 
     db.Comments.Add(myComment); 
     db.SaveChanges(); 
     return Redirect(url); 
    } 
    return Redirect(url); 
} 

我希望这将有助于。如果您可以显示您的Comment模型的代码,那么我可以编辑它,如果需要的话。

+0

这看起来是正确的,但我认为有一种方法可以用像Asp.helper这样的Html.EditorFor()等来做到这一点。我认为我不知道的是DeviceID。我有一个设备的虚拟集合:'public virtual ICollection Comments {get;组; }'并且Device_ID不会暴露在单个注释实例上,所以comment.Device_ID将不起作用。 – bischoffingston

+0

没关系我把它添加到我的模型,它弹出intellisense,再次感谢您的答复 – bischoffingston