[英]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.Error
為null
, @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.