asp.net - 我可以在 .aspx 页面中使用 ViewBag 吗?

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

我必须将我的 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){...

我得到这个错误:

The name 'Model' does not exist in the current context



显然,我是唯一一个从 razor 变成 aspx 的人,因为网上有很多关于它的信息。感谢任何帮助。

最佳答案

WebForms 通常不使用 ViewBag ,这只是使数据可用于 ASP.Net MVC 中的 View 的一种方法。使用 WebForms,使数据可用于“ View ”(包含 HTML 的 aspx 页面)的一种好方法是公开包含该数据的属性。

MVC 方式可能是设置 ViewBag.MyValue = "Some Value";在您的 Controller 中,并在您的 View 中使用 <h1>@ViewBag.MyValue</h1> 引用它.要在 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 代码应该可以正常工作。

关于asp.net - 我可以在 .aspx 页面中使用 ViewBag 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35712406/

相关文章:

c# - 是否有 CodeIgniter 等效的 ASP.NET?

C#生成唯一的Guid(不存在于数据库的表中)

asp.net-mvc - 在 Asp.Net MVC View 中,不呈现 Controller 对模型所做的更改

c# - 模型内的列表项在发布时始终为空 - Asp.net MVC

asp.net - JavaScript 触发 - vb.net api 调用的反射?

.net - PowerShell 是瓶颈吗

javascript - 为mvc3项目中的单个页面编写css

c# - 在构建过程中检查 Razor 错误

c# - jquery模态对话框打开带有多个图像的图像onclick

c# - 忽略 ASP.NET MVC 中的路由