我有一个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="return checkDefaultStore();">Add New</a>
我想在进入新页面之前检查一下,如果不存在则阻止转到新页面。
为此,我创建了这个JQuery函数:
function checkDefaultStore(e) {
var url = $('#ajax-info').data('checkdefaultstore');
$.ajax({
url: url,
data: {},
type: 'POST',
success: function (data) {
if (data.result)
return true;
else
return false;
},
error: function (response) {
}
});
}
定义返回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);
}
点击链接时,会调用函数并转到新页面。
答案 0 :(得分:3)
您的链接将始终重定向,因为ajax调用是异步的,当控制器返回结果时,浏览器已重定向到另一页。
您的选项是(按照优先顺序)
_storeService.HasDefault()
的值
生成您的视图,如果false
,则不生成
首先链接(不需要脚本)。onclick
,然后将其重定向到您的
Create()
方法。在该方法中检查的值
_storeService.HasDefault()
如果为false,则返回视图
错误消息(无需脚本)location.href
。你的代码是 <a href="#" id="create">Add New</a>
$('#create').click(function() {
var url = $('#ajax-info').data('checkdefaultstore');
$.post(url, function(data) {
if (data.result)
location.href = '@Url.Action("Create", "Purchase", new { area = "Admin" }';
else
alert(data.message);
}
});
});