2016-12-16 14 views
0

新しいタブ/ウィンドウを開き、グリッド内のボタンをクリックしたユーザーに基づいてファイルの内容を表示する次のコードがあります。私は文書を持っている場合アンカータグから新しいウィンドウ/タブを条件付きで開く方法は?

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

すべてが正常に動作し返すコントローラで

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

コントローラメソッドでエラーが発生したか、ドキュメントが見つからなかった場合、イベントが発生しないようにするにはどうすればよいですか?

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

関連する問題