2013-05-07 62 views
0

我有一个页面基本显示由数据库支持的文章。表格部分不绑定到模型

在那篇文章的下方有一个评论部分。这是由@ Html.Action调用返回_Comments部分提供的。

在_Comments部分。有一个可选的_AddComment @ Html.Action调用,它在其中呈现_AddComment部分。

_AddComment部分由GET和POST的_AddComment控制器方法支持。

[HttpPost] 
[ValidateAntiForgeryToken()] 
public ActionResult _AddComment(EditComment comment) 

GET方法只是返回一个附带AssetID的“EditComment”VM。

每当评论填写并发布在_AddComment视图中时。它的控制器方法被正确调用,但模型没有传回。

如果我查看Request参数,我可以看到正确传回的模型的所有属性。但是,它并未被绑定到Controllers方法参数中。

我试过指定“Model”作为Html.Begin窗体的路径参数。这没有什么区别。

看了很多SO帖子,没有一个排序我遇到的问题!

由于某种原因,推测模型绑定失败了。但显然没有例外,我不知道有什么问题!

查看型号代码

public class EditComment 
{ 
    public Boolean HasRating { get; set; } 
    public int AssetID { get; set; } 
    public int CommentID { get; set; } 
    public int Rating { get; set; } 
    public string Comment { get; set; } 
} 

查看代码

@model SEISMatch.UI.Models.Content.EditComment 

<hr /> 

<h3><span class="colored">///</span> Leave a Comment</h3> 

<div class="row" style="margin-top: 20px;"> 
    @using (Html.BeginForm("_AddComment", "Content", Model, FormMethod.Post)) 
    {  
     @Html.ValidationSummary(false) 
     @Html.AntiForgeryToken() 
     @Html.HiddenFor(m => m.AssetID) 
     @Html.HiddenFor(m => m.CommentID) 

     if (Model.HasRating) 
     { 
      @Html.EditorFor(m => m.Rating, "_StarRating") 
     } 

     <div class="span7"> 
      @Html.TextAreaFor(m => m.Comment, new { @class = "span7", placeholder = "Comment", rows = "5" }) 
     </div> 
     <div class="span7 center"> 
      <button type="submit" class="btn btn-success">Post comment</button> 
     </div> 
    } 
</div> 
+0

你可以发布你的视图模型和视图吗? – CorrugatedAir 2013-05-07 11:17:53

+0

请问您可以发布EditComment类的代码和帖子参数'(姓名:值) – Dima 2013-05-07 11:18:14

回答

1

你的动作参数的名字是注释,类EditComment有房产评论。 Modelbinder会感到困惑。

重命名您的操作参数并解决问题。

[HttpPost] 
[ValidateAntiForgeryToken()] 
public ActionResult _AddComment(EditComment model) 
+0

辉煌,谢谢。我不禁感到MVC有时会依赖幕后的许多黑魔法! – 2013-05-08 14:03:00