0

我有一个非常简单的局部视图,我正在使用 ajaxform。在我的部分视图中,我有一个单一的 textArea 和一个提交按钮。问题是我在文本区域中写入的任何内容,它都不会将数据发送到控制器,而是发送一个 =“Comment”的文本。如果我什么都不写,验证就完美了。

视图模型:

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>
}

这是错误的屏幕截图......为了更好地理解。我在视图中写“数据”,但在控制器中我得到“评论”..它来自哪里?

在此处输入图像描述

在此处输入图像描述 如果有人可以帮助我找出问题,那就太好了......!

4

3 回答 3

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)  
于 2012-06-09T23:48:41.783 回答
1

问题是您的提交按钮的name属性与Commenttextareaname属性相同。

要解决此问题,您需要将提交按钮更改为name“评论”以外的其他内容或name从提交按钮中删除属性,因此更改:

<input type="submit" value="Comment" name="comment" class="btn"/>

<input type="submit" value="Comment" class="btn"/>

因为Ajax.BeginForm使用 jQuery .serializeArray()方法 - 因为您的提交按钮有一个name并且此输入触发提交 - 也将提交按钮的值"Comment"发送到服务器。

于 2012-06-10T11:32:47.273 回答
0

实际上你的代码很混乱。在您的视图中,您不t use Model and seems you use m as your model and as i know this is completely wrong.i don知道您的视图正在呈现,但无论您使用 m=>m.sth,第二个 m 都必须是 nothin.instead 您必须在 cshtml 文件的第一个定义您的 @model NoteCommentViewModel,然后使用 Model 而不是第二个 m

于 2012-06-10T09:16:54.000 回答