ajax.beginform+sys,关于jquery:为什么Ajax.BeginForm替换我的整个页面?

上下文:带剃刀的Asp.Net MVC3

我试图将登录表单放在Razor布局(以前是母版页)上,以便在用户超时时,可以提示他(他)在不进行重定向的情况下登录(如RallyDev)。因此,我在Ajax.BeginForm中创建了一个_LogOn.cshtml部分内容,其中包含所有必需的内容(用户名等),其UpdateTargetId指向一个div,该div在ajax表单内保存了登录控件。该表单回发到AccountsController.RefreshLogOn操作,但是显然,包含页面可能是从其他控制器呈现的。 RefreshLogOn操作将返回PartialView(" _ LogOn")。无论如何,我的期望/愿望是仅替换此div中的控件。相反,发生的是我的页面位置更改为/ Accounts / RefreshLogon,并且整个页面被替换为部分页面。我应该采取另一种方法吗?

以下是相关代码:

_LogOn.cshtml

@{

using (Ajax.BeginForm("RefreshLogOn","Accounts",

new AjaxOptions {

OnSuccess ="logonSucceeded",

OnFailure ="logonFailed",

HttpMethod ="Post",

UpdateTargetId ="user-info" },

new { @id ="refresh"}))

{

@Html.AntiForgeryToken()

Your session has expired.

@Html.ValidationSummary()

Username:@Html.TextBoxFor(model => model.UserName)
Password:@Html.PasswordFor(model => model.Password)
Remember Me:@Html.CheckBoxFor(model => model.RememberMe)

}

}

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->生成的表单标签:

οnclick="Sys.Mvc.AsyncForm.handleClick(this, new Sys.UI.DomEvent(event));"

οnsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event),

{

insertionMode: Sys.Mvc.InsertionMode.replace,

httpMethod: Post,

updateTargetId: user-info,

onFailure: Function.createDelegate(this, logonFailed),

onSuccess: Function.createDelegate(this, logonSucceeded)

});">

ASP.NET MVC 3中的Ajax.*助手使用不引人注目的jquery,因此请确保在视图中引用了jquery.unobtrusive-ajax.js脚本。您也可以使用FireBug查看场景下发生的情况以及表单为什么不发送AJAX请求的原因。

此外,UpdateTargetId ="form"似乎也令人怀疑,尤其是当您的表单具有refresh id:@id ="refresh"时。使用id="form"的DOM中是否还有其他元素?也许您是说UpdateTargetId ="refresh"?

是的-我知道那有点令人困惑-我的ajax表单具有id =" refresh",而我的更新目标在ajax表单内部具有id =" form"-无论如何都要进行更改,以防万一单词"形式"使任何事情变得混乱。但我希望通俗易懂的技巧是关键。稍后会回报-谢谢!

可悲的是,没有喜悦。我所看到的是,由Ajax帮助程序生成的表单标记是针对MicrosoftAjax库的,而不是针对性强的javascript。我正在更新帖子以显示生成的表单标签。我拥有的帮助器位于System.Web.Mvc.dll v4.0.30319中。我应该再吃点什么吗?

@sydneyos,如果您认为Ajax帮助程序正在使用MicsoroftAjax,则需要包括这些库。让我给你一个建议:摆脱这种垃圾,并使用jquery。

还要注意,我的web.config中存在UnobtrusiveJavaScriptEnabled = false,因为在另一个页面中的表单验证由于设置为true而开始失败。但是我确实已经引用了那些库(Microsoftxxx)。

非常感谢,正在努力解决问题,Firebug帮助了,这是我的答案。

注意:我的问题是首先,我引用了错误的Ajax脚本文件jquery.validate.unobtrusive.min.js而不是jquery.unobtrusive-ajax.js,并且最新的jquery版本不起作用,只有jquery-1.7.1.min.js对我有效。

成功输入后,我试图返回内容

所以这是顺序:

达林和理查德·埃弗里特(Richard Everett)的职位提供了帮助。希望会有所帮助。

我有同样的问题,解决方法是:

检查一下

UnobtrusiveJavaScriptEnabled为true。

添加参考

jquery.unobtrusive-ajax.js作为Darin

谏。

不幸的是,这对您没有帮助,因为您将UnobtrusiveJavaScriptEnabled设置为false,但可以为某些人提供帮助。

我一直在一个MVC4项目中工作,我的Ajax表单以前是通过Ajax提交的,然后突然没有提交。我尝试了所有建议,然后终于找到将UnobtrusiveJavaScriptEnabled设置为true的地步。这成功了。非常感谢Ivan Sokalskiy。

请注意,如果像我一样使用Asp.Net模板,它将文件捆绑到bundles / jqueryval。

所以你必须添加

@Scripts.Render("~/bundles/jqueryval")

到页面。

迟了但正确。确保按顺序引用unobtrusive-ajax.js文件以及MicrosoftAjax.js和MicrosoftMvcAjax.js文件。

作品

除了检查是否引用了.js之外,还要检查是否未呈现任何其他表单标记。以我为例,我在母版页上有另一个表单标签,其默认操作导致整个页面重新加载。

如果我也需要其他表格怎么办?

如果需要将行为隔离到页面的特定部分,建议使用$ .ajax()。

我发现我的问题是由于缺少包含无阻碍脚本的ASP.Net MVC模板的bundles / jqueryval的包含。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值