2016-12-16 45 views
0

我有以下代码将打开一个新的选项卡/窗口,并显示基于用户单击网格中的按钮的文件的内容。如何从锚标签中有条件地打开新的窗口/选项卡?

$(myButton).attr('href', '/MyController/GetDoc?Field1=' + dataItem.data1 + '&Field2=' + dataItem.data2);  
$(myButton).attr('target', '_blank'); 

在控制器我回到

return new FileContentResult(Convert.FromBase64String(myDoc), "application/pdf"); 

一切工作正常,如果我有一个文件。

如果控制器方法出错或没有找到文档,我该如何防止事件发生?

UPDATE:

$(function() { 

    $(".myButtonClass").each(function() { 
     var button = $(this); 
     var docUrl = ''; 

     button.attr('target', '_blank'); 
     checkDocumentUrl(button, docUrl); 
    }); 

}); 

在我的按钮单击方法:

var myButton = $(e.currentTarget).closest(".myButtonClass"); 
$(myButton).attr('href', '/MyContoller/GetDoc?Field1=' + dataItem.data1+ '&Field2=' + dataItem.data2); 
+3

你不能。 Ypur从字面上打开一个新标签页。代码运行后发生错误。 – Liam

+0

为什么你不只是从你的服务器端返回一个友好的错误信息 – Liam

回答

0

单击该按钮之前,从服务器请求的文档。如果失败,文档不存在,您可以通过JavaScript禁用该按钮。

您的控制器应检查文档是否存在,如果不存在则返回HTTP 404

//Example data only. Each button presumably has its own data. 
 
var dataItem = { 
 
    data1: 'foo', 
 
    data2: 'bar' 
 
}; 
 

 
$(document).ready(function() { 
 

 
    //Check the url for each button 
 
    $('.myButton').each(function() { 
 
    var button = $(this); 
 

 
    var docUrl = '/MyController/GetDoc?Field1=' + dataItem.data1 + '&Field2=' + dataItem.data2; 
 

 
    button.attr('href', docUrl); 
 
    button.attr('target', '_blank'); 
 

 
    checkDocumentUrl(button, docUrl); 
 
    }); 
 

 
    function checkDocumentUrl(button, docUrl) { 
 
    //Make a request for the document 
 
    $.ajax({ 
 
     method: 'HEAD', 
 
     url: docUrl, 
 
     error: function() { 
 
     //If request fails, document does not exist 
 
     handleInvalidDocument(button, docUrl); 
 
     } 
 
    }); 
 
    } 
 

 
    function handleInvalidDocument(button, docUrl) { 
 
    button.on('click', function(e) { 
 
     //Prevent the link from opening a new tab 
 
     e.preventDefault(); 
 
     alert('Sorry, no document available at ' + docUrl); 
 
    }); 
 
    } 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a class="myButton">My Button</a>

+0

我喜欢这种方法,但不能得到它的工作。我无法在document.ready中设置docUrl,因为这些值将由我的网格中的每一行设置。 – PrivateJoker

+0

@JDS,你通过jQuery以编程方式设置'href'属性,对吗?你什么时候设置'href'属性? dataItem定义在哪里? –

+0

查看原始问题的更新 – PrivateJoker

相关问题