我有一个像这样的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);
    }


当点击链接时,它调用函数并进入新页面。

最佳答案

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

您的选择是(按优先顺序排列)


在GET方法中检查_storeService.HasDefault()的值
会生成您的视图,如果false,则不会生成
首先链接(无需脚本)。
从链接中删除onclick,然后将其重定向到您的
Create()方法。用这种方法检查
_storeService.HasDefault(),如果为false,则返回带有
错误消息(无需脚本)
使用以下命令在ajax成功回调中进行重定向
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);
            }
        });
    });

关于javascript - OnClick无法在ActionLink -ASP.NET MVC中起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37084715/

10-14 17:50
查看更多