javascript - OnClick 无法在 ActionLink -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="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 调用是异步的,并且当您的 Controller 返回结果时,浏览器已经重定向到另一个页面。

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

  1. 检查 GET 方法中 _storeService.HasDefault() 的值 生成您的 View ,如果 false,则不生成 首先链接(不需要脚本)。
  2. 从链接中删除 onclick 并让它重定向到您的 Create() 方法。在该方法中检查的值 _storeService.HasDefault() 如果为 false,则返回带有 错误消息(无需脚本)
  3. 使用 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/

相关文章:

javascript - 缩放元素及其内容——CSS3 缩放属性的替代方案?

javascript - Plotly.js - 热图动画未显示

php - 使用 jquery 更改 Flash 变量

jquery - Bootstrap 轮播控件在单击后保持可见(应该获得不透明度 0)

sql-server - Entity Framework 查询结果重复

c# - 获取 Simple Injector 的容器实例

php - .href.replace 给我双域 (http ://localhosthttp://mydomain. com)

javascript - 当字符串位于数组中时,返回 JavaScript 中的长度字符串

jquery - 将 jquery 动画代码转换为 css3 转换

c# - 如何使用 textile.net