基本的にデータベースに裏打ちされた記事を表示するページがあります。
その記事の下に、コメント セクションがあります。これは、_Comments パーシャルを返す @Html.Action 呼び出しによって提供されます。
その _Comments パーシャル内。その中に _AddComment パーシャルをレンダリングするオプションの _AddComment @Html.Action 呼び出しがあります。
_AddComment パーシャルは、GET および POST の _AddComment コントローラー メソッドによってサポートされます。
[HttpPost]
[ValidateAntiForgeryToken()]
public ActionResult _AddComment(EditComment comment)
GET メソッドは、AssetID が添付された「EditComment」VM を返すだけです。
コメントが入力され、_AddComment ビュー内に投稿されたとき。コントローラー メソッドは正しく呼び出されますが、モデルは返されません。
Request パラメータを見ると、モデルのすべてのプロパティが正しく返されていることがわかります。ただし、Controllers メソッドのパラメーターにはバインドされていません。
Html.Begin フォームのルート パラメータとして「Model」を指定してみました。違いはありません。
多くのSO投稿を見てきましたが、私が抱えている問題はどれもありません!
おそらく、何らかの理由でモデル バインディングがどこかで失敗しています。しかし、明らかに例外なく、何が問題なのかわかりません!
モデルコードを表示
public class EditComment
{
public Boolean HasRating { get; set; }
public int AssetID { get; set; }
public int CommentID { get; set; }
public int Rating { get; set; }
public string Comment { get; set; }
}
コードを表示
@model SEISMatch.UI.Models.Content.EditComment
<hr />
<h3><span class="colored">///</span> Leave a Comment</h3>
<div class="row" style="margin-top: 20px;">
@using (Html.BeginForm("_AddComment", "Content", Model, FormMethod.Post))
{
@Html.ValidationSummary(false)
@Html.AntiForgeryToken()
@Html.HiddenFor(m => m.AssetID)
@Html.HiddenFor(m => m.CommentID)
if (Model.HasRating)
{
@Html.EditorFor(m => m.Rating, "_StarRating")
}
<div class="span7">
@Html.TextAreaFor(m => m.Comment, new { @class = "span7", placeholder = "Comment", rows = "5" })
</div>
<div class="span7 center">
<button type="submit" class="btn btn-success">Post comment</button>
</div>
}
</div>