我有以下课程:
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) - 我隐藏了一个标签,但显示了第二个标签。 为什么这么奇怪的行为?
答案 0 :(得分:0)
在Html.BeginForm()命令中,您创建一个HtmlAttribute对象,并使用它将textarea的名称和ID设置为FormAddComment
。因为这是表单中唯一的字段,所以您需要更改方法签名,如下所示:
[HttpPost]
public ActionResult PostComment(string FormAddComment)
您当前的签名不会从发布的表单中收到任何内容。如果您使用Fiddler或类似工具来检查发布的内容,您将看到FormAddComment=[whatever was typed into the textarea]
作为从您的浏览器发送的POST的正文。