我有一个非常简单的局部视图,我正在使用ajaxform。在我的部分视图中,我有一个sigle textArea和一个Submit按钮。 问题是我写入文本区域的任何内容,它不会将数据发送到控制器,而是发送一个=“Comment”的文本。 如果我不写任何东西,验证工作完美。
Viewmodel:
public class NoteCommentViewModel
{
public Int32 Id { get; set; }
[Required(ErrorMessage="Hey, if you dont wanna write then why pressing the button !!")]
public string Comment { get; set; }
public DateTime CommentDate { get; set; }
public long UserId { get; set; }
public double Rating { get; set; }
public Guid NoteId { get; set; }
}
控制器:
//
//GET:/Notes/Comment/
public ActionResult Comment(string id)
{
ViewBag.NoteId = id;
var m = new NoteCommentViewModel()
{
NoteId = new Guid(id),
UserId = Convert.ToInt64(Session["LoginUserId"].ToString()),
//Comment=""
};
return PartialView(m);
}
//
//POST:/Notes/Comment
[HttpPost]
public ActionResult Comment(NoteCommentViewModel nvm)
{
NoteRatingComments comment = new NoteRatingComments();
comment.Comment = nvm.Comment; // Here I always have "Comment", regardless whatever I write in the page.
comment.EntryDate = DateTime.Now;
comment.NoteId = nvm.NoteId;
comment.UserId = nvm.UserId;
comment.Rating = 3.00;
dc.NoteRatingComments.AddObject(comment);
dc.SaveChanges();
return Content(Boolean.TrueString);
}
观点:
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Ajax.BeginForm("Comment", "Notes", null, new AjaxOptions
{
UpdateTargetId = "Comment-message",
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST",
OnSuccess = "commentSuccess"
}, new { id = "commentForm" }))
{
<div style="margin-top:20px;">
<div id="commentSuccess"></div>
<div class="comentPic">
@{
long UserId = Convert.ToInt64(Session["LoginUserId"].ToString());
string Fullname = Session["LoginUserFullName"].ToString();
}
<img src='https://graph.facebook.com/@UserId/picture' height="100px" width="100px"/>
</div>
<div class="commentText">
@Html.HiddenFor(m => m.UserId)
@Html.HiddenFor(m=>m.NoteId)
@Html.TextAreaFor(m => m.Comment, new { style = "width:600px;height:120px;" })
<br />
@Html.ValidationMessageFor(m => m.Comment)
<div style="text-align:right;">
<input type="submit" value="Comment" name="comment" class="btn"/>
</div>
</div>
<div class="clear"></div>
</div>
}
以下是错误的屏幕截图...以便更好地理解。我在视图中写“数据”,但在控制器中我得到“评论”..它来自哪里?
如果有人可以帮助我找出问题,那就好了...... !!
答案 0 :(得分:1)
我不确定你的问题到底是什么。但是下面的代码应该可行。
public class NoteCommentViewModel
{
public Int32 Id { get; set; }
[Required(ErrorMessage=" Your Error message")]
[DataType(DataType.MultilineText)]
public string Comment { get; set; }
//other properties
}
在您的View
中,像这样使用
@Html.EditorFor(m => m.Comment)
答案 1 :(得分:1)
问题是,您的提交按钮的name
属性与Comment
textarea name
属性相同。
要解决此问题,您需要将提交按钮的name
更改为“注释”以外的其他内容,或从提交按钮中删除name
属性,因此请更改:
<input type="submit" value="Comment" name="comment" class="btn"/>
要
<input type="submit" value="Comment" class="btn"/>
因为Ajax.BeginForm
使用了jQuery .serializeArray()方法 - 因为您的提交按钮有name
并且此输入触发了提交 - 也会发送提交按钮的值{{1}到服务器。
答案 2 :(得分:0)
实际上你的代码非常令人困惑。在你的视图中你没有t use Model and seems you use m as your model and as i know this is completely wrong.i don
知道你的视图正在渲染,但无论你在哪里使用m =&gt; m.sth,第二个m必须是nothin.instead你必须首先在cshtml文件中定义你的@model NoteCommentViewModel然后使用模型而不是第二个m