Javascript 表单提交后如何停止从部分页面重定向
出现问题时,我有一个名为Javascript 表单提交后如何停止从部分页面重定向,javascript,c#,jquery,json,asp.net-mvc,Javascript,C#,Jquery,Json,Asp.net Mvc,出现问题时,我有一个名为Manage的partialview,我将该partialview加载到: 控制器AdminPanel,查看AdminProfile如下: <div id="tab-2" class="tab-pane"> @{Html.RenderPartial("~/Views/Account/Manage.csh
Manage
的partialview,我将该partialview加载到:
控制器AdminPanel
,查看AdminProfile
如下:
<div id="tab-2" class="tab-pane">
@{Html.RenderPartial("~/Views/Account/Manage.cshtml");
}
</div>
这是加载的部分页面:
@model LocalPasswordModel
@{
ViewBag.Title = "Change Password";
}
<section class="hgroup">
<div class="panel-body">
<h1>@ViewBag.Title</h1>
<ul class="breadcrumb pull-right top-right">
<li>You're logged in as <strong>@User.Identity.Name</strong></li>
</ul>
<ul class="message-success">@ViewBag.StatusMessage</ul>
@using (Html.BeginForm("Manage", "Account", Form.Post, new { @class = "form-horizontal" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<div class="form-group">
<label class="col-sm-2 control-label">Old Password</label>
<div class="col-sm-10">
@Html.PasswordFor(m => m.OldPassword, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">New Password</label>
<div class="col-sm-10">
@Html.PasswordFor(m => m.NewPassword, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Confirm Password</label>
<div class="col-sm-10">
@Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-sm-8 col-sm-offset-2">
<input type="submit" class="btn btn-primary" value="Change password" />
</div>
</div>
}
</div>
</section>
所有我想做的就是停止重定向后,我提交,我已经打开了这个悬赏。如果您还可以包括我如何在用户点击submit后收到状态消息,那就太好了
例如,用户点击save changes>saves to the server>消息然后被发送回部分页面(全部不重定向)是因为当您按save时,它会向服务器发送一个常规的http post到帐户/管理页面,因此您被重定向。所以你的javascript从来没有真正运行过
尝试使用Ajax.begin或更改保存按钮以使用javascript。首先,您需要将
POST
操作结果修饰为POST
[HttpPost]
public ActionResult Manage(LocalPasswordModel model){
其次,您可以通过
在控制器内测试表单提交结果的有效性
这将管理用户是否被重定向
[HttpPost]
public ActionResult Manage(LocalPasswordModel model){
if(condition to redirect){
return RedirectToAction("AdminProfile", "AdminPanel");
}
return View(model);
}
最后,我看不出您将jquery放在了什么地方。
它需要放在表单页面的末尾,脚本部分。
你提到它在你的版面页面上
我认为这个链接可能也有帮助,也有助于防止表单提交客户端
为了具体控制您想要重定向到的位置,在每个地方添加重定向都有一个结果,例如:请注意,我只是返回到adminprofile,因为这是op想要的
作为旁注,您需要仔细考虑您的程序流程,以决定如何管理无效尝试等。如果您使用AJAX发布表单数据,则只需在提交函数中
<form onsubmit="mysubmitfunc(event)" ....>
function mysubmitfunc(e)
{
e.preventDefault();
/*
YOUR AJAX CODE GOES HERE
*/
return false; //last line in the function
}
如何正确使用ajax提交?附加到表单提交事件,捕获提交事件,停止发布,从javscript发布,并在成功时处理响应 将您的_layoutpagejs替换为next,确保使用ID标识表单,否则此javascript可能会影响其他表单
$(function() { //shorthand document.ready function
//recommended to use Id on form identification not class... search on google how to
//attach handler on form submit
$('.form-horizontal').submit(catchSubmit);
//custom handler for form submit
function catchSubmit(event) {
event.preventDefault(); //stop html form post
// ajax post with serialized form
$.post($(this).attr("action"),
$(this).serialize(),
postSuccessHandler
);
}
//redirect decizion
function postSuccessHandler(data) {
if (data.redirectTo) {
window.location.href = data.redirectTo;
} else {
$(".tab-2").html(data);
}
}
});
您还可以将html按钮移动到表单外部 如果在控制器中的return语句上放置断点,则返回的json是否正确?它甚至不支持调用控制器方法?因此,可以使用ajax.beginform,也可以通过单击“保存”按钮来附加您拥有的javascript。它看起来不像您的
$ajax()
调用附加到任何DOM事件。请使用$.ajax()
或ajax.beginform()
但不能同时使用这两种方法。如果您使用$.ajax()
将您的ajax.BeginForm()
转换为Html.BeginForm()
。通常,我们在不想重定向时使用ajax。标准格式的帖子可能会让你的问题消失。为什么您决定在这里使用AJAX?我看不到您在表单提交中调用AJAX函数的任何地方。此外,ajax代码还没有包装在函数中。请使用@yvette和@lewis taylor建议的[HttpPost]
来装饰您的post操作,并使用ajax.BeginForm()
。请不要建议人们在submit属性中添加字符串。在DOM就绪事件中通过javascript正确地附加函数。好吧,主要关注的是preventDefault和返回false,而不是如何附加submit事件。对通过javascript附加事件是一种很好的方法。实际上我意识到ajax脚本没有做任何事情,是我的重定向将我发回。当我没有输入正确的凭据时,我似乎会被重定向回Account/Manage。如果用户输入了正确的凭据,重定向就可以正常工作,但是只要你点击submit使用错误的值或没有值,它会将我发送到帐户/管理。此外,这些消息也不会显示在部分屏幕中。它们只显示在Account/Manage中。现在不显示。我需要将消息发送回并呈现在AdminPanel/AdminProfile中的partial中。配置文件的一部分有一个名为account的选项卡,您可以在其中更改凭据。此选项卡渲染局部视图。我不希望它再重定向到帐户/管理页面。我以为打个电话就可以了,但出于某种原因,这是一项艰巨的任务。
<form onsubmit="mysubmitfunc(event)" ....>
function mysubmitfunc(e)
{
e.preventDefault();
/*
YOUR AJAX CODE GOES HERE
*/
return false; //last line in the function
}
$(function() { //shorthand document.ready function
//recommended to use Id on form identification not class... search on google how to
//attach handler on form submit
$('.form-horizontal').submit(catchSubmit);
//custom handler for form submit
function catchSubmit(event) {
event.preventDefault(); //stop html form post
// ajax post with serialized form
$.post($(this).attr("action"),
$(this).serialize(),
postSuccessHandler
);
}
//redirect decizion
function postSuccessHandler(data) {
if (data.redirectTo) {
window.location.href = data.redirectTo;
} else {
$(".tab-2").html(data);
}
}
});