0

簡単に言えば@RenderPage、より大きな CSHTML 内で使用してレンダリングされた部分的な CSHTML に 2 つの要素があります。1 つはドロップダウン、もう 1 つは href です。(以下の部分的な CSHTML を参照してください。)

ユーザーがドロップダウンから別の名前を選択すると、jqueryメソッドが起動され、次のように数値がページに.change()ポスト ( ) されます。.ajax()

@{
    var ajax = Request["picked"];
}

<div id="pt_picker">
    @Html.DropDownList("PTPICKER", ...)
</div>

<div id="switcherlink">
    @{
        @Html.ActionLink("Go", "StartFlow", "Person", new { pid = @ajax, redirectUrl = "InSession" }, null)
    }
</div>

<script type="text/javascript">
    $(document).ready(function () {

        $('#PTPICKER').change(function () {
            $.ajax(
                {
                    url: window.location.pathname,
                    type: 'POST',
                    data: { picked: $("#PTPICKER").val() },
                    success: function (result) { alert("ok"); },
                    error: function (result) { alert("not ok"); }
                }
            );
        });

    });
</script>

デバッガーを使用すると、数値がポストされ、それを評価できます。デバッガーは、新しい値で Html.ActionLink 行を再度ヒットしたように見えます。しかし、結果のページには、「pid」の古い値を持つ href が表示されます。

何か案は?前もって感謝します!

4

1 に答える 1

1

しかし、結果のページには、「pid」の古い値を持つ href が表示されます。

それは、success 関数で行ったのはアラートだけだからです。元の値をサーバーからの値に置き換えたことはありません。あなたの質問から、コントローラーアクションが返す部分が不明ですが、result変数を使用して DOM の対応する部分を置き換える必要があります。

success: function (result) { 
    // You need to inject the result coming from your controller action 
    // (and having the updated values) back into the DOM
    $('#some_id').html(result);
},
于 2013-08-06T14:51:38.803 に答える