2013-04-23 6 views
29

下記のようにJavaScriptのモデル値を更新したいのですが、動作しません。カミソリでRazorビューでJavaScriptのモデル値を更新するにはどうすればよいですか?

function updatePostID(val) 
{ 
    @Model.addcomment.PostID = val; 
} 

foreach(var post in Model.Post) 
{ 
    <br/> 
    <b>Posted by :</b> @post.Username <br/> 
    <span>@post.Content</span> <br/> 
    if(Model.loginuser == Model.username) 
    { 
     @Html.TextAreaFor(model => model.addcomment.Content) 
     <button type="submit" onclick="updatePostID('@post.PostID');">Add Comment </button> 
    } 
} 

以下のように誰もがJavaScriptでモデル値を割り当てる方法を教えてもらえます?見ますか

答えて

34

これは、あなたが使用することができPostID

@Html.Hidden("PostID", Model.addcomment.PostID) 
//OR 
@Html.HiddenFor(model => model.addcomment.PostID) 
+0

foreachループは生成されたHTMLは foreach post.getElementById( 'addcomment_PostID')。したがって、addcomment_PostIDが更新されるのはポイントであり、動作しません。 foreachの外に置いて、それは働いた。ありがとう。 – michaeld

+0

PostIDにアクセスする方法はあなたの質問からは分かりません。複数の要素が生成された場合でも、それらの要素をどのように処理するかによって異なります。つまり、コントロールの配列または個別の要素です。後者の場合、 'Html.Hidden(" PostID _ "+ @ post.PostID)'を使う必要があります。これをJavaScript関数に渡すことができます。しかし、私はあなたが何をしようとしているかを完全に理解していると言うことができます。 ID /名前があらかじめわかっていないので、あなたのモデルに登場することはありません – codingbiz

+0

モデルで値が更新されています – michaeld

10

ページが構築されている間のみモデル(@Model)が存在します。ページがブラウザでレンダリングされると、存在するのはHTML、JavaScript、CSSだけです。

あなたがしたいことは、隠しフィールドにPostIDを入れることです。 PostIDの値は固定されているので、実際にはJavaScriptは必要ありません。単純な@HtmlHiddenForで十分です。

ただし、foreach loop to a for loopを変更する必要があります。最終的な解決策は、次のようになります:

for (int i = 0 ; i < Model.Post; i++) 
{ 
    <br/> 
    <b>Posted by :</b> @Model.Post[i].Username <br/> 
    <span>@Model.Post[i].Content</span> <br/> 
    if(Model.loginuser == Model.username) 
    { 
     @Html.HiddenFor(model => model.Post[i].PostID) 
     @Html.TextAreaFor(model => model.addcomment.Content) 
     <button type="submit">Add Comment</button> 
    } 
} 
+0

こんにちはジェイソンが、私はより多くのコードを追加して変更した、ここではそのonclickのボタンのJavaScriptでモデルの値にそのポストIDをキャプチャするforeachループを持っています。私はこの場合html hiddenがうまくいかないと思います。また、私はモデルをアクションメソッドに渡しているので、代わりに "commentPostID"プロパティにアクセスできません。ポストID値でModel.addcomment.PostIDを更新したいと思います。 – michaeld

+0

これはうまくいくでしょう: '' –

2

ための隠しフィールドや他のコントロールを持っている

function updatePostID(val) 
{ 
    document.getElementById('PostID').value = val; 

    //and probably call document.forms[0].submit(); 
} 

を動作するはずjQueryとAjaxの電話番号を使用して、特定のアップデートをJavascriptでサーバーにポストバックすることができます。

それはこのようなものになります。

function updatePostID(val, comment) 
{ 

    var args = {}; 
    args.PostID = val; 
    args.Comment = comment; 

    $.ajax({ 
    type: "POST", 
    url: controllerActionMethodUrlHere, 
    contentType: "application/json; charset=utf-8", 
    data: args, 
    dataType: "json", 
    success: function(msg) 
    { 
     // Something afterwards here 

    } 
    }); 

} 
関連する問題