如何将值从局部视图传递到asp.net MVC中的共享视图_Layout.cshtml?

时间:2016-08-09 15:52:26

标签: c# asp.net asp.net-mvc partial-views viewbag

有一个控制器可以捕获异常。我想将错误消息传递给_Layout.cshtml中的通用javascript,以便应用于所有页面。完全找到该值是否从普通视图传递到_Layout.cshtml,例如, @ViewBag =“错误消息”;在视图或ViewBag.ErrorMessage =“错误消息”;在控制器中,但它在局部视图中不起作用。

如何将字符串消息从局部视图传递给_Layout.cshtml?

3 个答案:

答案 0 :(得分:0)

不确定您要做什么。但是你可以在部分视图中放置一个脚本块,它在渲染后运行全局javascript函数,可能包含一条消息或其他数据。

例如在_Layout中你有:

<script>
    function ShowError(message) {
        alert(message);
    }
</script>

然后在你的部分你有:

<script>
 // check for existence of error and if so
 ShowError(ErrorMessage);
</script>

答案 1 :(得分:0)

如果要在同一请求期间将数据从局部视图传递到其布局,可以通过ViewBag对象执行此操作:

部分视图文件

@{
ViewBag.ErrorMessage = "error message";
}

_layout file

@if (ViewBag.ErrorMessage != null)
{
    <script>
    alert(@ViewBag.ErrorMessage);
    </script>
}

如果您想在控制器的操作中捕获异常,然后在重定向上传递错误消息,则可以使用TempData执行此操作:

控制器

public ActionResult SomeAction(){
...
try{
  ....
}catch(Exception e){
  TempData["errorMessage"] = e.Message;
  return RedirectToAction("MaybeSomeOtherAction");
}
...
}

“MaybeSomeOtherAction”的文件

@if (TempData["errorMessage"] != null)
{
    <script>
    alert(@TempData["errorMessage"]);
    </script>
}

答案 2 :(得分:0)

为错误制作公共属性;

 public static class Common
    {
        public static bool ERROR {get;set;}
    }

如果抛出异常或显示错误消息,请将此属性设置为true;

try
{
   //Any Code
}
catch(Exception)
{
   Common.ERROR = true;
   return PartialView("_PartialView");

}

在您的_Layou文件,视图或_Partial View中,您可以在Document.Ready检查此属性,如果是,则可以显示错误提醒。

$(function(){               
         if(@Html.Raw(Json.Encode(@HelloWorldMvcApp.Common.ERROR)))
         {
                alert("error message");
                    return;
        }
})


Demo if this property is True

<强> Demo if it is False or its value is not set to true