[英]How to conditionally open a new window/tab from an anchor tag?
我有以下代碼,這些代碼將打開新的標簽頁/窗口,並根據用戶單擊網格中的按鈕顯示文件的內容。
$(myButton).attr('href', '/MyController/GetDoc?Field1=' + dataItem.data1 + '&Field2=' + dataItem.data2);
$(myButton).attr('target', '_blank');
在控制器中,我返回
return new FileContentResult(Convert.FromBase64String(myDoc), "application/pdf");
如果我有文件,一切正常。
如果控制器方法出錯或找不到文檔,如何防止事件發生?
更新:
$(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);
單擊按鈕之前 ,請從服務器請求文檔。 如果失敗,則該文檔不存在,您可以通過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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.