2016-03-01 65 views
3

我必须将我的UI页面从.cshtml文件移动到.aspx文件。现在我遇到了一些编译错误。我可以在.aspx页面中使用ViewBag吗?

首先是'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

很显然,我这是从剃刀到aspx的唯一一个人,因为网上有关于它的事情。感谢任何帮助。

+1

我可以问你为什么要从剃刀到ASPX?出于某种原因,人们正朝着相反的方向前进。你是否也从MVC移动到Web窗体,或者你还在做MVC? – mason

+1

@mason你是对的,但如果他想要移动,他必须处理动态ViewState:请找到文章,希望它能解决你的问题。http://www.codeproject.com/Articles/316326/Dynamic-ViewState-in-ASP-Net-WebForms –

+0

@Vivek让我们不要假设Web窗体。 ASPX可以与MVC一起使用。 – mason

回答

2

WebForms通常不会使用ViewBag,这只是一种在ASP.Net MVC中为View提供数据的方法。使用WebForms,将数据提供给“视图”(包含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

你的页面应该有

<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of myProject.Models.Navigation)" %> 

顶部指定型号。

相关问题