簡體   English   中英

PartialView用於顯示基於ViewBag的模態錯誤消息

[英]PartialView for displaying Modal Error Message based on ViewBag

我正在使用SweetAlert 2插件開發一個MVC 5應用程序。

我的目標:當我的應用程序中的任何地方發生錯誤時,我想顯示帶有標題/消息的(集中式,sweetalert)模式對話框。

我創建了一個名為“_ModalError”的PartialView,並在我的主要共享“_Layout”視圖的底部引用了它。 基本上這樣就可以為每個頁面啟用這個局部視圖。

然后我創建了一個簡單的Error類......

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

我想,每當我收到錯誤時,我都會實例化一個新的MyError對象,設置相應的ErrorTitle和ErrorMessage屬性,然后將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。 如果是,則發生錯誤,因此顯示它。 這是我到目前為止所擁有的......

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

問題是,當頁面第一次加載時,我遇到這個錯誤,當它到達視包代碼時...

Cannot perform runtime binding on a null reference.

我正在嘗試訪問ViewBag但顯然它一開始並不存在,這是有道理的。 但是,檢查它是否為空並不是真的有效。 你知道為什么嗎? 有什么建議? 這是一個錯誤,瘋狂或過度殺戮的解決方案嗎?

********解決方案********

這是解決方案。 感謝Stephen Muecke(下文)提供的Json.Encode建議! 我希望這對其他人有幫助!

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

問題是剃刀代碼在發送到視圖之前在服務器上進行了解析,因此在服務器上評估@ViewBag.Error.ErrorTitle,@ViewBag.Error.ErrorMessage ,如果@ViewBag.Errornull@ViewBag.Error異常是throw因為你無法訪問null對象的屬性。 (它不會因為它在javascript if語句中而停止評估它 - 這是客戶端代碼,在那時甚至不存在)

相反,指定Error對象為JavaScript對象,然后測試你if

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

您還應該考慮使用包含Error對象的基本視圖模型,而不是在ViewBag屬性中傳遞它。

暫無
暫無

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

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