我必须将我的 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/