1

有很多例子展示了如何从文件或数据库中存储和检索虚拟视图,但没有一个例子展示了如何配置 root web.config 以便应用程序正常工作,当视图的内容从文件中检索并包含例如@ViewBag.Title = "Some Title"线。

在这种情况下,我得到CS0103: The name 'ViewBag' does not exist in the current context错误,就像我从 ~/Views 项目文件夹中删除 web.config 的情况一样。

那么,为了修复上述错误,从 ~/Views/web.config 到 root web.config 的哪些配置元素?

是否可以在运行时将配置元素加载到程序集中?

4

2 回答 2

1

问题与以下事实有关:在虚拟视图的情况下,从文件或数据库中检索内容的视图继承自System.Web.Mvc.ViewStartPage包含 Html 和 Url,但不包含 ViewBag 或 Ajax 属性的视图。虚拟视图引用如下

public class DynamicViewsController : Controller
{
    public ActionResult GetView()
    {
        //SomeModel model = new SomeModel() { Count = 1 };
        return View("/Virtual/VirtualViewToShow.cshtml");
    }
}

位于 ~/Views/ 文件夹中的视图继承自 System.Web.Mvc.WebViewPage,其中定义了 ViewBag 和 ViewData 以及 Ajax 属性。

更改操作方法的解决方法如下

public PartialViewResult GetView()
{
    //SomeModel model = new SomeModel() { Count = 1 };
    return PartialView("/Virtual/VirtualViewToShow.cshtml");
}

并添加

  @{
        Layout = "~/Views/Shared/_Layout.cshtml";
   }

到虚拟视图的文本,以便也加载布局。我不知道虚拟视图继承自的原因System.Web.Mvc.ViewStartPage,但我会尝试在另一个线程中找到原因,并在创建线程时发布链接。

已编辑

所以说新创建的线程的链接在这里

附上“显示完整编译源”截图在此处输入图像描述

于 2012-11-13T14:55:41.433 回答
0

按照上面提到的步骤,你就完成了!

  • 将 ~/views/web.config 的<configSections>部分与根级别 web.config合并
  • 现在只需将<system.web.webPages.razor>部分从 ~/views/web.config 移动到根级别 web.config
  • 干杯:) 它完成了。
  • 您还应该将<appSettings>、<system.web> 和 <system.webServer>与根级别的 web.config 合并。
于 2012-11-09T17:33:12.723 回答