【问题标题】:Can I pass both the ViewBag AND a Model to a View我可以将 ViewBag 和模型都传递给视图吗
【发布时间】:2014-12-01 23:09:30
【问题描述】:

我可以使用混合方法,在 ViewBag (C#) / ViewData (VB) 中传递信息,但也包含模型

例如,我开始通过错误控制器将简单的标题传递给错误视图:

Function NotFound() As ActionResult
    Response.StatusCode = 404
    ViewData.Add("Title", "404 Error")
    Return View("Error")
End Function

这很好,视图可以访问属性@ViewData("Title")

然后我想在 HandleErrorInfo 对象中包含一些由自定义错误自动路由的异常信息,如下所示:

Function NotFound(exception As HandleErrorInfo) As ActionResult
    Response.StatusCode = 404
    ViewData.Add("Title", "404 Error")
    ViewData.Add("Message", "Sorry, the requested page could not be found.")
    Return View("Error", exception)
End Function

然后,在视图上,我声明了一个这样的模型:

@ModelType System.Web.Mvc.HandleErrorInfo

现在我可以访问像@Model.Exception.Message 这样的属性,但我的@ViewData("Title") 消失了。

WebViewPage(Of TModel) 仍然有一个 ViewData 属性,但看起来我无法从控制器向它传递任何东西,除非它明确在模型中。

当然,作为一种解决方法,我可以创建一个可以为每个对象强类型存储的基类,但是当我想通过 ViewBag 传递的只是标题时,这似乎有点笨拙。

有没有办法同时使用 ViewBag 和 Model?

【问题讨论】:

  • 这是传递模型和视图包的常规方法。在我的 MVC 4/5 项目中为我工作,但它们在 C# 中。检查你那边出了什么问题。
  • 同时使用ViewBag@model 很好,首先我听说ViewBag 在同时设置时会丢失...

标签: asp.net asp.net-mvc vb.net asp.net-mvc-4 viewbag


【解决方案1】:

在这种情况下发生的情况是,当 CustomErrors 尝试路由到 Error 控制器上的 NotFound 操作时,它只能提供默认构造函数。没有找到,它完全绕过控制器,直接进入错误页面,该页面已经准备好要传递的模型。

作为一个小的概念证明,传递这两个参数绝对是可能的,正如这个例子所证明的那样

TestModel.vb

Public Class TestModel
    Public Property ModelInfo As String
End Class

TestController.vb

Public Class TestController :  Inherits System.Web.Mvc.Controller

    Function Index() As ActionResult
        Dim model As New TestModel With {.ModelInfo = "Hello"}
        ViewData("ViewDataInfo") = "World"
        Return View("Index", model)
    End Function

End Class

Test\Index.vbhtml

@ModelType TestModel

@Model.ModelInfo @ViewData("ViewDataInfo")

【讨论】:

    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    相关资源
    最近更新 更多