jquery – 为什么Ajax.BeginForm替换我的整个页面?

前端之家收集整理的这篇文章主要介绍了jquery – 为什么Ajax.BeginForm替换我的整个页面?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
上下文:Asp.Net MVC3 w / Razor

我试图把一个登录表单在Razor布局(以前的主页),这样,当用户超时,他/他可以提示登录而不被重定向(如在RallyDev)。所以,我创建了一个部分_logon.cshtml与所有必要的东西(用户名等)在一个Ajax.BeginForm与UpdateTargetId,指向一个div,其中包含在ajax形式的登录控件。该表单发回到AccountsController.Refreshlogon操作,但显然,包含页面可能已从不同的控制器呈现。 Refreshlogon操作返回PartialView(“_ logon”)。在任何情况下,我的期望/愿望是只有这个div内的控件被替换。发生了什么,而是我的页面位置更改为/ Accounts / Refreshlogon,整个页面替换为partial。有没有另一种方法,我应该采取?

以下是相关代码

_logon.cshtml

@{
        using (Ajax.BeginForm("Refreshlogon","Accounts",new AjaxOptions { 
                      OnSuccess = "logonSucceeded",OnFailure = "logonFailed",HttpMethod = "Post",UpdateTargetId = "user-info" },new { @id = "refresh"}))
        {  
        @Html.AntiForgeryToken()

       <div id="user-info">
                <p>Your session has expired.</p>
            <div class="error">@Html.ValidationSummary()</div>
            <table>
                <tr>
                    <td>Username:</td>
                    <td>@Html.TextBoxFor(model => model.UserName)</td>
                </tr>
                <tr>
                    <td>Password:</td>
                    <td>@Html.PasswordFor(model => model.Password)</td>
                </tr>
                <tr>
                    <td>Remember Me:</td>
                    <td>@Html.CheckBoxFor(model => model.RememberMe)</td>
                </tr>

            </table>
        </div>
            }
        }

AccountsController

public ActionResult Refreshlogon (logonModel model)
{
    if (ModelState.IsValid)
    {
        if (MembershipService.ValidateUser(model.UserName,model.Password))
        {
            ...content elided...

            return PartialView("_logon");
        }

        ModelState.AddModelError("",ErrorMessages.IncorrectUsernameOrPassword);
    }

    return PartialView("_logon",model);
}

Ajax.BeginForm – >表单标签生成

<form action="/Accounts/Refreshlogon" id="refresh" method="post" 
    onclick="Sys.Mvc.AsyncForm.handleClick(this,new Sys.UI.DomEvent(event));"
    onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this,new Sys.UI.DomEvent(event),{ 
    insertionMode: Sys.Mvc.InsertionMode.replace,httpMethod: &#39;Post&#39;,updateTargetId: &#39;user-info&#39;,onFailure: Function.createDelegate(this,logonFailed),onSuccess: Function.createDelegate(this,logonSucceeded) 
    });">

解决方法

Ajax。* ASP.NET MVC 3中的helpers使用不显眼的jquery,因此请确保您在视图中引用了jquery.unobtrusive-ajax.js脚本。还可以使用 FireBug来查看在这些场景下发生了什么,以及为什么表单不发送AJAX请求。

此外,UpdateTargetId =“form”似乎是可疑的,特别是当你的表单有刷新id:@id =“refresh”。在你的DOM里面有一些其他元素,id =“form”?也许你的意思是UpdateTargetId =“刷新”?

原文链接:https://www.f2er.com/jquery/184308.html

猜你在找的jQuery相关文章