1

ASP.NETMVCを使用してWebページを作成しています。私は次の入力を非表示に定義しています:

<%=Html.Hidden("inputHiddenSelectedMenuId") %>

そして、私はこのjs関数でその値を設定します:

function SetSelectedMenu(id) {
     $('#inputHiddenSelectedMenuId').val(id);         
 }

js init関数でポストバックを作成した後、非表示の入力で設定された値を使用したいのですが、値は文字列が空です。

$(document).ready(function() {

     $('div.nav > a').removeClass('active');
     var id = $('#inputHiddenSelectedMenuId').val();
     if (id != "") {
         $("#" + id).addClass('active');
     }         
 });

なぜこれが起こっているのか誰かがヒントを与えることができますか?

4

1 に答える 1

2

javascriptで入力の値を読み取ろうとしています。フォームのボタンをクリックしてポストバックを実行すると、ページが再読み込みされ、ページが読み込まれるたびにJavaScriptが再実行されます。javascriptの入力値を読み取るだけの場合は、ポストバックを実行する必要はありません。

$('#inputHiddenSelectedMenuId').bind('click', function ()
{
     var id = $('#inputHiddenSelectedMenuId').val();
     // do stuff with it.
});

クリック機能はポストバックなしで実行されます。

さて、投稿後にMVC内から非表示フィールドの内容を読み取ろうとしている場合、これは別の問題です。モデルバインディングを介してフォームデータからプルする必要があります(またはRequest.Form[]コレクションを介して直接読み取る必要があります。

public ActionResult SomeActionToPostTo(int inputHiddenSelectedMenuId)
{
     //model binding should find the form field called inputHiddenSelectedMenuId and populate the argument in this method with it's value. If it's not an integer then just change the type of the argument to the appropriate type.
}
于 2010-11-25T17:40:01.890 に答える