OnClick对ActionLink -ASP.NET MVC中的Preventt不起作用

时间:2016-05-07 05:07:57

标签: 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="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) {

    }
});
}

定义返回falsetrue

的操作方法
 [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);
    }

点击链接时,会调用函数并转到新页面。

1 个答案:

答案 0 :(得分:3)

您的链接将始终重定向,因为ajax调用是异步的,当控制器返回结果时,浏览器已重定向到另一页。

您的选项是(按照优先顺序)

  1. 检查GET方法中_storeService.HasDefault()的值 生成您的视图,如果false,则不生成 首先链接(不需要脚本)。
  2. 从链接中删除onclick,然后将其重定向到您的 Create()方法。在该方法中检查的值 _storeService.HasDefault()如果为false,则返回视图 错误消息(无需脚本)
  3. 使用在ajax成功回调中进行重定向 location.href。你的代码是
  4.     <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);
                }
            });
        });