我可以在.aspx页中使用ViewBag吗?

eri*_*ist 4 asp.net asp.net-mvc models razor viewbag

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

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

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

@model myProject.Models.Navigation
Run Code Online (Sandbox Code Playgroud)

我对其进行了更改,以使其可以在.aspx页中按如下方式工作:

<%@ Import Namespace="myProject.Models" %>
Run Code Online (Sandbox Code Playgroud)

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

@foreach (myProject.Models.Navigationitem item in Model.navigationItems){...
Run Code Online (Sandbox Code Playgroud)

我已将其替换为:

<% foreach (myProject.Models.Navigationitem item in Model.navigationItems){...
Run Code Online (Sandbox Code Playgroud)

我得到这个错误:

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

显然,我是唯一一个从剃须刀发展到aspx的人,因为在线上确实有关于它的信息。感谢任何帮助。

gil*_*ly3 5

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

MVC的方法可能是ViewBag.MyValue = "Some Value";在Controller中进行设置,然后在视图中引用<h1>@ViewBag.MyValue</h1>。要在WebForms中执行等效操作,您首先需要在代码背后定义一个属性:

protected string MyValue { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后,将值设置在某个位置,也许在您的中Page_Load

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

然后使用WebForms语法将值写在页面上:

<h1><%= MyValue %></h1>
Run Code Online (Sandbox Code Playgroud)

对于您的特定情况,您似乎并没有实际使用ViewBag。没关系,您还可以将对象用作属性:

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

protected void Page_Load (object sender, EventArgs e)
{
    this.Model = SomeMethodThatReturnsModel();
}
Run Code Online (Sandbox Code Playgroud)

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