我必须将我的UI页面从.cshtml文件移动到.aspx文件。现在我有几个编译错误。
首先是' ViewBag'在当前上下文中不存在。我可以不在.aspx中使用它吗?如果没有,什么是好的替代品?
其次,.cshtml页面有一个模型声明:
@model myProject.Models.Navigation
我更改了它,以便它可以在.aspx页面中工作,如下所示:
<%@ Import Namespace="myProject.Models" %>
我仍然不确定这是否是正确的替代品,因为我无法包含&#34;导航&#34;没有收到错误。现在,在我曾经拥有的代码中:
@foreach (myProject.Models.Navigationitem item in Model.navigationItems){...
我已将其替换为:
<% foreach (myProject.Models.Navigationitem item in Model.navigationItems){...
我收到了这个错误:
名称&#39;型号&#39;在当前上下文中不存在
显然,我是唯一一个从剃刀到aspx的人,因为它在网上确实存在。感谢任何帮助。
答案 0 :(得分:3)
WebForms通常不使用ViewBag
,这只是一种在ASP.Net MVC中为您的View提供数据的方法。使用WebForms,一种将数据提供给“View”(包含HTML的aspx页面)的好方法是公开包含该数据的属性。
MVC方式可能是在您的Controller中设置ViewBag.MyValue = "Some Value";
,并在您的视图中使用<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提供的代码应该可以正常工作。
答案 1 :(得分:1)
您的页面应该
<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of myProject.Models.Navigation)" %>
在顶部指定模型类型。
答案 2 :(得分:0)
您可以使用 ViewState 代替 ViewBag,如下例所示。
private List<TrimPackage> Packages
{
get
{
return (List<TrimPackage>)ViewState["Packages"];
}
set
{
ViewState["Packages"] = value;
}
}