2017-01-21 14 views
0

投稿を有効にしようとしています。私は「postId」を送信コントローラのアクションだビューからコントローラへのアクション(httpget)から別のビューへ同じコントローラーアクション(httppost)へのデータの受け渡し

<script> 
    $("#target").click(function() { 
     $("#formPlace").load('@Url.Action("AddComment","Posts", new { postId = Model.Id })');    
    }); 
    </script> 

@model PostViewModel 

モデルは、私はJavaScriptを使用してコントローラに送信され、持っていると「ID」プロパティ:それは私の見解は、受信モデルですTo:

[HttpGet] 
    public ActionResult AddComment(int postId) 
    { 
     var comment = new CommentViewModel(); 
     comment.PostId = postId; 
     return this.PartialView("_AddComment", comment); 
    } 

このビューは、ユーザーがコメントの内容を埋めるために持っているフォームを返します

ビューがモデルを受け取ると、 "PostId"はまだ正しい=私はjavascriptで設定したものです。しかし、ユーザーがフォームを送信した後、コントローラに送信されるCommentViewModelには、 "PostId"の0(デフォルトのint値)が設定されます。これはコントローラーアクションです:

[HttpPost] 
    public ActionResult AddComment(CommentViewModel viewModel) 
    { 
     // transfer the view model to db model and save; 
    } 

正しいPostIdをどのように保つことができますか?

+0

'CommentViewModel'のコードはどうしたらいいですか? – CodingYoshi

答えて

1

AddCommentアクションメソッドにフォームを送信すると、既定のモデルバインダーは、フォームフィールド値をCommentViewModelオブジェクトのプロパティにバインドしようとします。フォームにContentプロパティの入力フィールドがありますが、PostIdのフィールドはありません。したがって、ブラウザはnameという名前のフォーム要素の値だけを送信します。

PostIdが必要な場合は、Post idの値をフォームに保存する必要があります。ユーザーはこれを見る/編集する必要がないので、これをフォームの非表示の入力フィールドに入れておくことができます。

ヘルパーメソッドHtml.HiddenForを使用すると、対応するプロパティの名前と値で非表示フィールドを生成できます。

@using (Html.BeginForm("AddComment", "Posts", FormMethod.Post)) 
{ 
    <div>Enter your comment here:</div> 
    <div> 
    @Html.TextAreaFor(x => Model.Content) 
    </div> 
    @Html.HiddenFor(s=>s.PostId) 
    <input type="submit" name="Submit" /> 
} 

それとも隠し入力要素のマークアップ(ヘルパーは、最終的にこれだけを生成する)

<input type="hidden" name="PostId" value="@Model.PostId" /> 
+1

私が言っているのはまさに、コードです。それは速かった。 – vittore

0

フォームにPostIdの値を含む非表示フィールドを配置する必要があります。コンテンツを投稿するだけです。代わりに、あなたのポストアクションAddCommentはurlパラメータpostIdを持つべきですので、フォームのアクションurlにはpostIdが含まれます。

0

あなたはTempDataをにあなたのPostIdを設定することができますし、コントローラで、その後のポストアクションで取得することができます。あなたが視界からそれを取得したい場合は、Shyjuによって示唆されるように隠しフィールドに設定する必要があります。

関連する問題