0

アクション間で変数を渡す必要がある Web サイトで作業しています。変数は実際にはinputフィールドです。マークアップの例を次に示します。

<table>
    <tr>
        <td><input type="checkbox" name="major/1" value="1" checked /></td>
    </tr>
    <tr>
        <td><input type="radio" name="major/2" value="1" checked /></td>
        <td><input type="radio" name="major/2" value="2" /></td>
    </tr>
</table>

<a href="/NextPage/2/2">Next Page</a>

私は基本的に、ページネーションシステムを通過した値が必要なので、最後まですべて使用できるようにします。どうすればこれを達成できますか? ページ全体を囲むフォームを使用しないことが望ましいです。

4

3 に答える 3

1

あるページから別のページに入力フォーム要素を渡す唯一の方法は、フォーム ポストを使用することです。確かにセッションなどを介してデータを渡すことができますが、それはフォーム要素でデータを渡すことではありません。

フォームを使いたがらない理由がわかりません。非表示フィールドはフォーム要素です。それらはフォームで使用されます。それが彼らの目的です。フォーム要素を使用したいが、フォームを使用したくないですか? それはかなり無意味です。

編集:

あなたの問題は、ブラウザとサーバーの仕組みを本当に理解していないことだと思います。これらは、get および post コマンドを介してのみ通信します。したがって、入力をサーバーに送信する唯一の方法は投稿を介することであり、投稿にはフォームが含まれている必要があります。それがブラウザがデータを送信する方法です。

JavaScript を使用してできることはたくさんありますが、それらはすべて、投稿を行うよりもはるかに面倒です。

于 2012-04-14T23:12:10.587 に答える
0

フォームを使用せずにこれを実現する最も簡単な方法は、jQueryまたはjavascriptを使用して値を取得し、それらをurl変数として追加することです。もう1つの方法は、値をキャプチャし、ajaxを介して事前に送信し、リンクをたどる前にバックエンドにセッ​​ション変数として保存させることです。まず、リンクにリッスンするクラス名を付けます...

$('.navigation').on('click', '.pagelink', function(e){
    e.preventDefault();

    // url variables method
    var theUrl = ($(this).attr('href')) + '?';
    var ajaxUrl = $(this).attr('href');

    // needed for ajax method
    var theVals = new Object();
    $.each('table input', function() {
        // needed for ajax method
        var theName = $(this).attr('name');
        theVals[theName] = $(this).val();
        // url variables method
        theUrl = theUrl + theName + '=' + $(this).val() + '&';
    });
    // url variables method
    theUrl = theUrl.substr(0, theUrl.length - 2);// removes ending ampersand
    window.location = theUrl;

    // the ajax session method
    $.ajax({
        url : [MVC path to store session variables - ex: /ajax/setsession/],
        type : 'POST',
        data : theVals,
        success : function(data) {
            if(data) {
                // do something with data, like display success message
                window.location = ajaxUrl;
            }
        }
    });
于 2012-04-14T23:23:18.190 に答える
0

2 つの方法が考えられます。まず、ポストバック フォーム内の非表示の入力フィールドを使用します。これにより、現在の反復の変数がポストバック時にモデルに保存されるようになります。

@Html.HiddenFor(model=>model.Field1)

2 つ目は、必要なものをコントローラー側の TempData に保存し、次のポストバックで取得することです。

TempData["tempkey"] = MyModel;

最善の解決策がこれらのいずれか (または別のもの) であるかどうかは、モデルとコントローラー ロジックがどのように見えるかによって決まると思います。

于 2012-04-14T23:02:10.553 に答える