0

私は、抱えている問題の回避策または解決策を見つけるために多くの時間を費やしました。以下のプロトタイプのような AJAX フォームがあります。

@using (Ajax.BeginForm("MyAction", "Account", new AjaxOptions() { 
    HttpMethod = "POST",
    UpdateTargetId = Model.MyID.ToString(), OnSuccess = "onSuccess" 
}))
{    
    @Html.AntiForgeryToken()

    <fieldset>
    <legend></legend>    

    @Html.HiddenFor(m => m.MyID, new { @id = Model.MyID.ToString() })

}

ご覧のとおり、HiddenFor 値は、POST アクションからの以下のコード スニペットのように、POST アクション内から取得される値に基づいて更新されます。

return Content(model.MyID.ToString());

良いことは、AJAX 呼び出しが HiddenFor 値を更新することですが、次の POST アクションでは、MyID の値がゼロではないことを知っているにもかかわらず、ゼロです!

Model.Clear()やなどを提案する投稿をたくさん読みましたが、Model.Remove("MyID")役に立ちませんでした。

私は何を間違っていますか、そしてこれに対する確実な解決策は何ですか? 事前に助けてくれてありがとう。

4

3 に答える 3

1

InsertionModeを指定しませんでした。デフォルトは置換です。非表示の入力をコントローラーからのプレーンテキストに置き換えているようです。ajax リクエスト中に chrome/firefox 開発者ツールバーの [ネットワーク] タブを確認します。リクエスト後にhtmlをチェックするのに役立つElementsタブもあるかもしれません。

編集:

例: コントローラー:

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Test2(Test2Model model)
        {
            var rnd = new Random();
            var random = rnd.Next(10000).ToString();
            var response = string.Format("<input id=\"MyID\" name=\"MyID\" type=\"hidden\" value=\"{0}\">", random);
            return Content(response);
        }

意見:

@using (Ajax.BeginForm("Test2", "Form", new AjaxOptions() { 
    HttpMethod = "POST",
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "replaceid" 
}))
{    
    @Html.AntiForgeryToken()

    <input type="submit"/>

    <div id="replaceid">
        @Html.HiddenFor(m => m.MyID)
    </div>
}

よろしく

于 2013-10-14T12:57:05.947 に答える
0

コントローラーの GET メソッドでモデルを提供するのを忘れている可能性があります。

于 2016-04-29T13:58:30.317 に答える