ASP.NET MVC验证问题 - 未发布数据

时间:2011-09-09 22:17:26

标签: asp.net-mvc-3 validation

我有以下课程:

public class NewCommentClass
{
    public string ActionName { get; set; }
    public object RouteValues { get; set; }
    [Required(ErrorMessage = "Comment Required")]
    public string Comment { get; set; }
    public int? CommentParentID { get; set; }
}

以下代码:

        NewCommentClass newCommentClass = new NewCommentClass() { ActionName = "PostComment", RouteValues = new { id = ideaItem.Ideas.IdeaID } };
        Html.RenderPartial("~/Views/Shared/NewComment.ascx", newCommentClass);

和NewComment.ascx:

    <% @ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<NEOGOV_Ideas.Models.NewCommentClass>" %>
....
    <div class="comment-new-container">
        <div class="grid_1 alpha item-sidebar">
            <p style="padding-top: 0.5em">
                <a href="#">
                    <img src="<% = userAvatar %>" class="profile-photo" alt="Your Profile Picture" width="48"
                        height="48" /></a>
            </p>
        </div>
        <div class="grid_8 omega">
            <div class="comment-body">
                <% using (Html.BeginForm(Model.ActionName, "Home", Model.RouteValues, FormMethod.Post, new { id = "FormAddComment", name = "FormAddComment" }))
                   { %>
                <fieldset>
                    <% = Html.TextAreaFor(model => model.Comment, htmlAttributes)%>
                    <% = Html.ValidationMessageFor(model=>model.Comment) %>
                    <input type="submit" value="<% = postButtonTitle %>" class="small blue awesome noborder" />
                </fieldset>
                <%} %>
            </div>
        </div>
        <div class="clear">
        </div>
    </div>

并在控制器中跟随post方法:

     public ActionResult PostComment(int id, string Comment, int? CommentParentID, string referrerUrl)
        {
...
}

但此验证无法正常运行。 如果我输入数据到textarea并点击“提交” - 一切正常 但是,如果我只是单击“提交”而没有数据 - 获取错误消息(这是正确的),但是当我在此操作后输入数据到textarea - 错误消息被隐藏,但表单没有提交!如果我添加Html.ValidationSummary(true) - 我隐藏了一个标签,但显示了第二个标签。 为什么这么奇怪的行为?

1 个答案:

答案 0 :(得分:0)

在Html.BeginForm()命令中,您创建一个HtmlAttribute对象,并使用它将textarea的名称和ID设置为FormAddComment。因为这是表单中唯一的字段,所以您需要更改方法签名,如下所示:

[HttpPost]
public ActionResult PostComment(string FormAddComment)

您当前的签名不会从发布的表单中收到任何内容。如果您使用Fiddler或类似工具来检查发布的内容,您将看到FormAddComment=[whatever was typed into the textarea]作为从您的浏览器发送的POST的正文。