【问题标题】:Can I use ViewBag in an .aspx page?我可以在 .aspx 页面中使用 ViewBag 吗?
【发布时间】:2016-06-13 06:01:18
【问题描述】:

我必须将我的 UI 页面从 .cshtml 文件移动到 .aspx 文件。现在我遇到了几个编译错误。

首先是当前上下文中不存在“ViewBag”。我不能在 .aspx 中使用它吗?如果没有,什么是好的替代品?

其次,.cshtml 页面有一个模型声明:

@model myProject.Models.Navigation

我对其进行了更改,使其可以在 .aspx 页面中运行,如下所示:

<%@ Import Namespace="myProject.Models" %>

我仍然不确定这是一个正确的替代品,因为我无法在不出错的情况下包含“导航”一词。现在,在我曾经拥有的代码中:

@foreach (myProject.Models.Navigationitem item in Model.navigationItems){...

我已将其替换为:

<% foreach (myProject.Models.Navigationitem item in Model.navigationItems){...

我得到这个错误:

当前上下文中不存在名称“模型”

显然,我是唯一一个从 razor 转到 aspx 的人,因为网上确实有关于它的说法。感谢任何帮助。

【问题讨论】:

  • 我能问你为什么要从 Razor 转到 ASPX 吗?人们正朝着相反的方向前进是有原因的。您是否也从 MVC 转向了 Web 表单,或者您还在使用 MVC?
  • @mason 你是对的,但如果他想移动,他仍然与动态视图状态有关:请找到这篇文章,希望它能解决你的问题。 codeproject.com/Articles/316326/Dynamic-ViewState-in-ASP- Net-WebForms
  • @Vivek 我们不要假设 Web 表单。 ASPX 可以与 MVC 一起使用。
  • @mason 有效问题。我正在使用使用 asp.net 经典和 Web 表单的遗留代码库。我以为我可以潜入一个 MVC 页面,但我在 asp.net 中的知识还不够,不知道如何使它工作,并且它导致了许多服务器错误。解决方案是完全消除 MVC 并使用 Web 表单重写 http 请求。我焦急地期待着继续使用现代技术的项目!

标签: asp.net asp.net-mvc razor models viewbag


【解决方案1】:

您可以使用 ViewState 代替 ViewBag,如​​下例所示。

private List<TrimPackage> Packages
{
    get
    {
        return (List<TrimPackage>)ViewState["Packages"];
    }

    set
    {
        ViewState["Packages"] = value;
    }
}

【讨论】:

  • 但是你忘了解释 ViewState 和 ViewBagCollection 的区别
【解决方案2】:

WebForms 通常不使用ViewBag,这只是在 ASP.Net MVC 中使数据对您的视图可用的一种方式。使用 WebForms,将数据提供给“视图”(包含 HTML 的 aspx 页面)的一种好方法是公开包含该数据的属性。

MVC 方法可能是在你的 Controller 中设置 ViewBag.MyValue = "Some Value";,并在你的视图中使用 &lt;h1&gt;@ViewBag.MyValue&lt;/h1&gt; 引用它。要在 WebForms 中进行等效操作,您首先需要在代码隐藏中定义一个属性:

protected string MyValue { get; set; }

然后,在某处设置值,也许在您的Page_Load

protected void Page_Load (object sender, EventArgs e)
{
    this.MyValue = "Some Value";
}

并使用 WebForms 语法在页面上写入值:

<h1><%= MyValue %></h1>

对于您的具体情况,您似乎实际上并未使用ViewBag。没关系,您也可以将对象作为属性提供:

protected MyProject.Models.Navigation Model { get; set; }

protected void Page_Load (object sender, EventArgs e)
{
    this.Model = SomeMethodThatReturnsModel();
}

定义了属性并设置了值,上面的 ASPX 代码应该可以正常工作。

【讨论】:

    【解决方案3】:

    你的页面应该有

    <%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of myProject.Models.Navigation)" %>
    

    在顶部指定模型类型。

    【讨论】:

      猜你喜欢
      • 2016-06-03
      • 2020-08-26
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      相关资源
      最近更新 更多