簡體   English   中英

OnClick不能在ActionLink -ASP.NET MVC中起作用

[英]OnClick does not work to Preventt in ActionLink -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調用是異步的,並且當您的控制器返回結果時,瀏覽器已經重定向到了另一個頁面。

您的選擇是(按優先順序排列)

  1. 在生成視圖的GET方法中檢查_storeService.HasDefault()的值,如果為false ,則首先不要生成鏈接(不需要腳本)。
  2. 從鏈接中刪除onclick ,讓它重定向到您的Create()方法。 在該方法中,檢查_storeService.HasDefault()的值,如果為false,則返回帶有錯誤消息的視圖(無需腳本)
  3. 使用location.href在ajax成功回調中進行重定向。 您的代碼將是
    <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);
            }
        });
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM