0

非常に単純な部分ビューがあり、ajaxform を使用しています。私の部分的なビューでは、1 つの単一の textArea と [送信] ボタンがあります。問題は、テキスト領域に何を書き込んでも、コントローラーにデータを送信せず、「コメント」というテキストを送信することです。何も書かなければ、検証は完璧に機能します。

ビューモデル:

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

問題は、送信ボタンの属性がtextarea属性nameと同じであることです。Commentname

これを解決するには、送信ボタン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 を使用する場合はどこでも、2 番目の m は nothin である必要があります。代わりに、cshtml ファイルの最初に @model NoteCommentViewModel を定義し、2 番目の m の代わりに Model を使用する必要があります

于 2012-06-10T09:16:54.000 に答える