2016-03-01 38 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)" %> 

頂部指定型號。

相關問題