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的人,因为在线上确实有关于它的信息。感谢任何帮助。
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的代码应该可以正常工作。
| 归档时间: |
|
| 查看次数: |
4455 次 |
| 最近记录: |