Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript OnClick在ActionLink-ASP.NET MVC中不起预防作用_Javascript_Jquery_Asp.net Mvc - Fatal编程技术网

Javascript OnClick在ActionLink-ASP.NET MVC中不起预防作用

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

我有这样一个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>
定义返回
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调用是异步的,当控制器返回结果时,浏览器已重定向到其他页面

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

  • 检查GET方法中的
    \u storeService.HasDefault()
    的值 这将生成您的视图,如果
    false
    ,则不生成 首先是链接(不需要脚本)
  • 从链接中删除
    onclick
    ,让它重定向到您的
    Create()
    方法。在该方法中,检查
    \u storeService.HasDefault()
    如果为false,则返回带有 错误消息(不需要脚本)
  • 在ajax成功回调中使用
    location.href
    。您的代码将是
  • 
    $(“#创建”)。单击(函数(){
    var url=$('#ajax info').data('checkdefaultstore');
    $.post(url、函数(数据){
    if(data.result)
    location.href='@Url.Action(“创建”、“购买”、新建{area=“Admin”}”;
    其他的
    警报(数据、消息);
    }
    });
    });
    
    您的链接将始终重定向,因为ajax调用是异步的,当控制器返回结果时,浏览器已经重定向到另一个页面

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

  • 检查GET方法中的
    \u storeService.HasDefault()
    的值 这将生成您的视图,如果
    false
    ,则不生成 首先是链接(不需要脚本)
  • 从链接中删除
    onclick
    ,让它重定向到您的
    Create()
    method。在该方法中检查
    \u storeService.HasDefault()
    如果为false,则返回带有 错误消息(不需要脚本)
  • 在ajax成功回调中使用
    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);
        }