2017-03-01 6 views
3

私はのアプリケーションをSweetAlert 2 pluginで開発しています。ViewBagに基づくモーダルエラーメッセージを表示するためのPartialView

私の目標:私のアプリのどこにでもエラーが発生したときは、タイトル/メッセージ付きの(集中、sweetalert)モーダルダイアログを表示したいと思います。

「_ModalError」というPartialViewを作成し、メインの共有「_Layout」ビューの一番下にこれを参照しました。基本的に、この部分的な表示はすべてのページで有効になります。

私はその後、...

namespace MyApp.Models 
{ 
    public class MyError 
    { 
     public string ErrorTitle { get; set; } 
     public string ErrorMessage { get; set; } 
    } 
} 

をシンプルErrorクラスを作成した私は、私はエラーを取得するたびに、私はその後、設定、適切なErrorTitleとにErrorMessageプロパティを設定し、新しいMyErrorオブジェクトをインスタンス化だろう、ということを考えていましたViewBag.ErrorこのMyErrorオブジェクト。

private MyError err = new MyError(); 
err.ErrorMessage = "Your information was not valid. Please re-check everything."; 
err.ErrorTitle = "Error!"; 
ViewBag.Error = err; 

次に、JavaScriptでは、いつでも_ModalError(ページ)負荷が、それはViewBag.Errorが存在するかどうかになります。もしそうなら、エラーが発生したので、それを表示してください。ここでの問題は、私がしようとしている

...それはviewbagコードを打つときに、ページが最初にロードが、私はこのエラーを取得するときにすることを
Cannot perform runtime binding on a null reference. 

です....私がこれまで持っているもの

<script> 
    $(function() { 
     if (@ViewBag.Error != null) { 
      swal(
       @ViewBag.Error.ErrorTitle, 
       @ViewBag.Error.ErrorMessage, 
       'error' 
      ); 
    }; 
</script> 

ですViewBagにアクセスすることはできますが、最初は存在しないようですが、これは意味があります。しかし、それがヌルかどうかを確認することは実際には機能していません。なぜこれが分かっていますか?助言がありますか?これは欠陥のある、クレイジーな、または過剰殺しの解決策ですか?

********

********ソリューションはここソリューションです。 Json.EncodeアドバイスのためのStephen Muecke(下記)のおかげで!私はこれが他の誰かに役立つことを願っています!

<script> 
$(function() { 
    var error = @Html.Raw(Json.Encode(ViewBag.Error)); 
    if (error != null) { 
     swal(
      error.ErrorTitle, 
      error.ErrorMessage, 
      'error' 
     ); 
    } 
}) 

+0

http://stackoverflow.com/questions/8640927/checking-to-see-if-viewbag-has-a-property-or-not-to-conditionally-inject-javasc – Igor

+0

あなたは '@ViewBagをラップする必要があります.Error.ErrorTitle'と '@ ViewBag.Error.ErrorMessage'を引用符で囲みます – Igor

答えて

2

問題は、かみそりのコードはそう、そのビューに送信する前に、サーバー上の@ViewBag.Error.ErrorTitle,を解析され、@ViewBag.Error.ErrorMessageがサーバー上で評価されており、@ViewBag.Errornullある場合、例外がスローためでありますnullオブジェクトのプロパティにアクセスすることはできません。 (それはJavaScriptのifステートメント(クライアント側のコードであり、その時点で存在しないため)の評価を停止しません。

代わりに、Errorオブジェクトをjavascriptオブジェクトに割り当ててからテストしますあなたは

$(function() { 
    // Assign to a javascript variable 
    var error = @Html.Raw(Json.Encode(ViewBag.Error)) 
    if (!error) { 
     swal(
      error.ErrorTitle, 
      error.ErrorMessage, 
      'error' 
     ); 
    } 
} 

あなたはまた、ViewBagプロパティにそれを周りに渡すのではなく、あなたのErrorオブジェクトを含むベースビューモデルを使用して検討すべきブロックif

+0

' ViewBag'に 'Error'プロパティがあるかどうかを判断する必要があります。 – Igor

+0

@Igor。それはちょうど 'if(!error){'はどういう意味ですか? –

+0

Hm、ok。ダイナミックオブジェクトの存在しないプロパティへのアクセスがノーノーであるという印象を受けました。 – Igor

関連する問題