Javascript OnClick在ActionLink-ASP.NET MVC中不起预防作用
我有这样一个ActionLink:Javascript OnClick在ActionLink-ASP.NET MVC中不起预防作用,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我有这样一个ActionLink: @Html.ActionLink("Add New", MVC.Admin.Purchase.Create(), new { @class = "btn btn-success", onclick = "return checkDefaultStore();" }) 上面代码的html结果是: <a class="btn btn-sm btn-success" href="/Admin/Purchase/Create" onclick="ret
@Html.ActionLink("Add New", MVC.Admin.Purchase.Create(), new { @class = "btn btn-success", onclick = "return checkDefaultStore();" })
上面代码的html结果是:
<a class="btn btn-sm btn-success" href="/Admin/Purchase/Create" onclick="return checkDefaultStore();">Add New</a>
定义返回false
或true
的操作方法
[HttpPost]
public virtual JsonResult HasDefault()
{
bool result = _storeService.HasDefault();
if (result)
return Json(new { result = true },JsonRequestBehavior.AllowGet);
else
return Json(new { result = false, message = "default store does not exists" },JsonRequestBehavior.AllowGet);
}
单击链接时,它将调用函数并转到新页面。您的链接将始终重定向,因为ajax调用是异步的,当控制器返回结果时,浏览器已重定向到其他页面 您的选项是(按优先顺序排列)
\u storeService.HasDefault()
的值
这将生成您的视图,如果false
,则不生成
首先是链接(不需要脚本)onclick
,让它重定向到您的
Create()
方法。在该方法中,检查
\u storeService.HasDefault()
如果为false,则返回带有
错误消息(不需要脚本)location.href
。您的代码将是
$(“#创建”)。单击(函数(){
var url=$('#ajax info').data('checkdefaultstore');
$.post(url、函数(数据){
if(data.result)
location.href='@Url.Action(“创建”、“购买”、新建{area=“Admin”}”;
其他的
警报(数据、消息);
}
});
});
您的链接将始终重定向,因为ajax调用是异步的,当控制器返回结果时,浏览器已经重定向到另一个页面
您的选项是(按优先顺序排列)
\u storeService.HasDefault()
的值
这将生成您的视图,如果false
,则不生成
首先是链接(不需要脚本)onclick
,让它重定向到您的
Create()
method。在该方法中检查
\u storeService.HasDefault()
如果为false,则返回带有
错误消息(不需要脚本)location.href
。您的代码将是
$(“#创建”)。单击(函数(){
var url=$('#ajax info').data('checkdefaultstore');
$.post(url、函数(数据){
if(data.result)
location.href='@Url.Action(“创建”、“购买”、新建{area=“Admin”}”;
其他的
警报(数据、消息);
}
});
});
您使用了一个重载ActionLink()
,该重载将类名和javascript函数作为路由参数。您甚至从未点击过您的函数。即使点击了,也不会阻止重定向(当你的ajax函数返回一个值时,它已经出现了。你到底想实现什么?@StephenMuecke当点击链接时,它的调用函数和调用ActionMethod,但不要在ajaxI中运行成功函数
或错误函数
,我已经删除了你的“解决方案”:稍后我将添加一个答案来解释这些问题。您使用的ActionLink()
重载将类名和javascript函数作为路由参数。您甚至从未点击过您的函数。即使点击了,也不会阻止重定向(当你的ajax函数返回一个值时,它已经出现了。你到底想实现什么?@StephenMuecke当点击链接时,它的调用函数和调用ActionMethod,但不要在ajaxI中运行成功函数
或错误函数
,我已经删除了你的“解决方案”:稍后我将添加一个答案来解释这些问题。
[HttpPost]
public virtual JsonResult HasDefault()
{
bool result = _storeService.HasDefault();
if (result)
return Json(new { result = true },JsonRequestBehavior.AllowGet);
else
return Json(new { result = false, message = "default store does not exists" },JsonRequestBehavior.AllowGet);
}