4

アクションに値を渡すことができるように、Html.ActionLink を使用するときにテキスト ボックスの値から読み取る方法は?

私は以下のコードを持っています:

<table>
        <tr>
            <th>
                Consumer Key:
            </th>
            <td>
                @Html.TextBox("ConsumerKey")
            </td>
        </tr>
        <tr>
            <th>
                Consumer Secret Key:
            </th>
            <td>@Html.TextBox("ConsumerSecretKey")
            </td>
        </tr>
        <tr>
        <th>
        </th>
        <td>@Html.ActionLink("Retreive Access Tokens", "/Retrieve"</td>
        </tr>
    </table>

基本的に、コントローラー アクションを呼び出して、テキスト ボックスの値を渡す必要があります。

MVCでそれはどのように可能になるでしょうか?

HTMLボタンとそのアクションへのAJAX呼び出しだけを使用して実装できることはわかっていますが、MVCコントロールを使用する別の方法があることを願っていました。

4

4 に答える 4

3

コードをHtml.BeginForm( "Retrieve"、 "Twitter")ブロック内に配置すると、ブラウザーにレンダリングされるhtmlは、次のようなフォームタグで囲まれます。

<form method="POST" action="/Retrieve/Twitter">
    <table>...</table>
</form>

次に、送信ボタンをクリックすると、フォームとテキストボックスのすべての値がMVCアプリケーションに送信されます。次に、MVCは、これらのフォーム値(@ Html.TextBox( "ConsumerSecretKey")を使用して作成されたテキストボックスとその値)をコントローラーアクションのパラメーターにマッピングする作業を行います。

あなたの場合、おおまかに次のようにブラウザに表示されます(以下で行ったように、アクションリンクを「送信」タイプの入力に変更する必要があります。

<form method="POST" action="/Retrieve/Twitter">
    <table>
        <tr>
            <th>
                Consumer Key:
            </th>
        <td>
            <input id="ConsumerKey" name="ConsumerKey" type="text" value="" />
        </td>
    </tr>
    <tr>
        <th>
            Consumer Secret Key:
        </th>
        <td>
            <input id="ConsumerSecretKey" name="ConsumerSecretKey" type="text" value="" />
        </td>
    </tr>

    <td><input type="submit" id="Retrieve" value="Retreive Access Tokens" /></td>

    </tr>

</table>

</form>


これがアプリケーションにポストバックされると、テキストボックスに入力したテキスト(タグとしてレンダリング)は、名前に一致するアクションメソッドのパラメーターにマップされます。

public ActionResult Retrieve(string consumerKey, string consumerSecretKey)
{
    //action method code here
}


ここで機能している概念は、モデルバインディングと呼ばれます。概要については、ASP.NET MVCアプリケーションのコントローラーとアクションメソッドを参照し、[アクションメソッドパラメーター]セクションまでスクロールダウンしてください。

于 2012-02-10T12:23:20.463 に答える
0

FormCollection オブジェクトを使用できます。

[HTTPPost]
 public ActionResult Retrieve(FormCollection collection)
    {
         string consumerKey=collection["ConsumerKey"];
         string consumerSecretKey=collection["ConsumerSecretKey"];
    }

フォームの送信ボタンを使用して、フォーム ポスト メソッドを使用します。

于 2012-02-10T12:20:24.287 に答える
0

実際には、を使用して POST することはできませんHtml.ActionLink。プロパティを使用Ajax.ActionLinkして設定することで実現できAjaxOptionsます。使用できない場合は、 (このヘルパーによって生成された ID に基づいて)formによって生成されたクリックを傍受する jQuery 関数をいつでも実装し、テキスト ボックスの値をパラメーターとして追加できます。Html.ActionLinkここでの問題は、Ajax を使用しない場合、GET メソッドを使用して値を送信することであり、これは大きな NO です。GET は、データベースやその他のバックエンド データ ストアの内容を変更するためではなく、値を取得するために使用する必要があります。Ajax を使用する場合は、次のようにすることができます。

$(document).ready(function() {
    $("myActionLinkId").click(function() {
        var textBoxValue = $("#myTextBoxId").val();

        $.post($(this).attr("href"), { id: textBoxValue }, function(result) {
            alert("Result data: " + result);
        });
    });
});
于 2012-02-10T12:56:33.427 に答える