2010-11-25 10 views
1

私はASP.NET MVCを使用してWebページを作っています。 私は、次の入力definied隠されています:入力隠しコントロールは、ポストバック間に彼の値を保持しません

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

そして、これが機能JSに私は、その値を設定します。私は、値セットを使用したいのJS init関数でポストバックを行った後

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

隠された入力では値は文字列が空です。

$(document).ready(function() { 

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

これはどうして起こっているのでしょうか?

+0

MVCはポストバックをサポートしていません。それはどちら?問題の理由だろうWebFormsやMVCを使用していますか? –

+0

ポストバックは標準のHTML操作です。ポストバックはWebフォーム専用ではありません。違いは、Webフォームポストバックにはviewstateという非表示フィールドが含まれているためです。 – Chev

+0

フィールドが(コード内の)ポストバックにリセットされる理由はありますか – Prescott

答えて

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. 
} 
+0

リンクが押された後に何をしたいですか?ポストバックを行い、クラスをlinに設定するk IDが隠しフィールドに格納されている –

+0

その場合は、A)ポストバックをajaxで実行します。またはB)ViewDataコレクションのいくつかのjavascriptを返信し、次のロード時にプログラムでビューに追加します( 'ViewData [" someJavaScript "] .ToString()') – Chev

関連する問題