0

我有一个页面,基本上显示由数据库支持的文章。

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

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

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

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

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

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

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

我尝试将“模型”指定为 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>
4

1 回答 1

1

您的操作参数名称是注释,并且类 EditComment 具有属性注释。Modelbinder 感到困惑。

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

[HttpPost]
[ValidateAntiForgeryToken()]
public ActionResult _AddComment(EditComment model)
于 2013-05-07T12:04:17.007 回答