0

コントロールへの Ajax.BeginForm リダイレクト

Razor を使用して MVC 4 アプリケーションを作成しました。次のコードは、フォームでデータを送信するために使用されます。

@using (Ajax.BeginForm("Topup", "Card", new AjaxOptions { HttpMethod = "POST", OnBegin = "Submitting_Form", OnComplete = "Submitted_Form", UpdateTargetId = "SendStatus"}, new { id="FormSubmit"})) 
{    
    @Html.ValidationSummary()

    <ul data-role="listview" data-inset="true">
        <li data-role="list-divider">Mobile Topup</li>

        <li data-role="fieldcontain">
            @Html.LabelFor(m => m.MobileNo)            
            @Html.TextBoxFor(m => m.MobileNo)            
        </li>    


        <li data-role="fieldcontain">
            <label class="ui-input-text" id="SendStatus">Test</label>            
        </li>

        <li data-role="fieldcontain">
            <input type="submit" value="Topup" />
            <input type="button" value="Reset" onclick="this.form.reset(); $('#TopupDate').val(Current_Date('d-m-y'));" />
        </li>        



        <!--<li data-role="list-divider">Navigation</li>-->
        <li>@Html.ActionLink("Home", "Index", "Home")</li>
    </ul>
}

コントローラー上

 //[AllowAnonymous]
        [HttpPost]
        public ActionResult Topup(TopupModel model)
        {
            try { 

            }
            catch (Exception ExC) {
                Bug.Bug BG = new Bug.Bug();
                BG.Send_Bug_Message(ExC);
            }
            //return PartialView("PartialTopup", model);
            return Content("Success");
        }

ただし、送信後、ページは自動的にコントローラーにリダイレクトされます (たとえば、http://localhost:43289/Card/Topup文字列「未定義」

なぜこうなった?私はすでに次のライブラリに含まれています。

<script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>


<script src="/Scripts/MicrosoftAjax.debug.js"></script>
<script src="/Scripts/MicrosoftMvcAjax.debug.js"></script>

Firebug で調査したところ、いくつかの手がかりが得られました。

POST http://localhost:43289/Card/Topup?Length=4 200 OK 114ms jquery-2.0.3.js (line 7845)
POST http://localhost:43289/Card/Topup?Length=4 200 OK 113ms jquery-2.0.3.js (line 7845)

それは2回起こりました。なんで?この問題を解決するために私を助けてください。

4

1 に答える 1

1

間違ったオーバーロードを使用しています。現在AjaxOptions、ルート値パラメーターに含まれています。代わりにこれを使用してください。

@using (Ajax.BeginForm("Topup", "Card", null, new AjaxOptions { HttpMethod = "POST", OnBegin = "Submitting_Form", OnComplete = "Submitted_Form", UpdateTargetId = "SendStatus"}, new { id="FormSubmit"})) 

長さのクエリ文字列が表示される場合、実際には、間違ったパラメーターを使用しているというヒントです。

アップデート:

現在 2 回投稿されている理由は、あなたが自分のスクリプトを 2 回参照しているからだと思います。パーシャルにスクリプトを入れないでください。メインビューまたはビューに配置するだけlayoutです

于 2013-11-02T15:16:13.480 に答える