Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于ViewBag显示模式错误消息的PartialView_Javascript_C#_Jquery_Asp.net Mvc_Razor - Fatal编程技术网

Javascript 基于ViewBag显示模式错误消息的PartialView

Javascript 基于ViewBag显示模式错误消息的PartialView,javascript,c#,jquery,asp.net-mvc,razor,Javascript,C#,Jquery,Asp.net Mvc,Razor,我正在用开发一个MVC5应用程序 我的目标:当我的应用程序中的任何地方发生错误时,我希望显示一个带有标题/消息的(集中式、sweetalert)模式对话框 我创建了一个名为“_ModalError”的PartialView,并在我的主共享“_布局”视图的底部引用了它。基本上,每个页面都将启用此部分视图 然后我创建了一个简单的错误类 namespace MyApp.Models { public class MyError { public string Error

我正在用开发一个
MVC5
应用程序

我的目标:当我的应用程序中的任何地方发生错误时,我希望显示一个带有标题/消息的(集中式、sweetalert)模式对话框

我创建了一个名为“_ModalError”的PartialView,并在我的主共享“_布局”视图的底部引用了它。基本上,每个页面都将启用此部分视图

然后我创建了一个简单的错误类

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>
我试图访问
ViewBag
,但很明显,它一开始并不存在,这是有道理的。但是,检查它是否为null并没有真正起作用。你知道这是为什么吗?有什么建议吗?这是一个错误的、疯狂的或过度杀戮的解决方案吗

********解决方案********

这是解决办法。感谢Stephen Muecke(以下)提供的Json.Encode建议!我希望这对其他人有帮助

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

$(函数(){
var error=@Html.Raw(Json.Encode(ViewBag.error));
if(错误!=null){
游泳(
error.ErrorTitle,
error.ErrorMessage,
“错误”
);
}
})

问题在于,razor代码在发送到视图之前在服务器上进行解析,因此
@ViewBag.Error.ErrorTitle、
@ViewBag.Error.ErrorMessage
在服务器上进行评估,如果
@ViewBag.Error
空值
,则,抛出异常是因为您无法访问
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'
        );
    }
}

您还应该考虑使用包含< <代码>错误>代码>对象的基本视图模型,而不是在<代码> ViewBag < /代码>属性中传递。

您需要包装<代码> @ ViepBog。错误。ErrorTitle < /COD>和“代码> @ ViekP袋。错误。Error消息< /代码>中,他首先需要确定<代码> ViewBag < /代码>是否有<代码>错误< /代码>。属性。@Igor。这正是
如果(!error){
所做的:)嗯,好的。我的印象是,访问动态对象的不存在属性是不允许的。@Igor,它不是访问动态对象的不存在属性。第一行代码的计算结果为
null
(如果
ViewBag.error
未分配)或者发送到
{ErrorTitle:'Error!',ErrorMessage:'Your information was…'}
,如果有的话。然后是访问属性值的javascript(而不是razor)@StephenMuecke perfect!谢谢!
$(function() {
    // Assign to a javascript variable
    var error = @Html.Raw(Json.Encode(ViewBag.Error))
    if (!error) {
        swal(
            error.ErrorTitle, 
            error.ErrorMessage,
            'error'
        );
    }
}