2014-01-20 20 views
1

我有很多使用相同變量的頁面。我想創建這些在一個單一的頁面,所以我不必一遍又一遍地打字。我該怎麼做呢?Razor網頁:如何創建可供所有頁面使用的變量?

我都嘗試_appStart.cshtml和_PageStart.cshtml,但是當我跑我的內容頁,我得到錯誤

這是我_PageStart.cshtml「這個名字selectedData不會在當前的背景下存在」:(試過_appstart.cshtml太)

@{ 
var db = Database.Open("razortest"); 
var selectQueryString = "SELECT * FROM tbl_stasjon ORDER BY nr"; 
var selectedData = db.Query(selectQueryString); 
}   

我的網頁和所有包含此:

@foreach(var row in (selectedData)) { 

html here...  

} 
+2

我的第一個問題是爲什麼......但是你有沒有考慮將代碼放置在其他控制器繼承的基礎控制器中?然後你可以使用'ViewBag' .. –

+1

可能的重複[如何在MVC中創建通用視圖模型?](http://stackoverflow.com/questions/9423977/how-can-i-create-a-通用 - 視圖 - 模型在MVC)。你提出的在你的問題中提出解決問題的方式非常反對[MVC設計](http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)。您示例中的邏輯類型不應該存在於任何View中。 –

+2

這不是MVC,而是網頁。我目前正在遵循本教程:http://www.w3schools.com/aspnet/webpages_intro.asp – zonaren

回答

2

對於您可以創建一個靜態類/法機智相當直接的解決方案欣App_Code返回查詢對象,然後調用該方法,無論你需要它:

using System; 
using System.Collections.Generic; 
using System.Web; 
using WebMatrix.Data; 

public static class MyClass 
{ 
    public static IEnumerable<dynamic> GetData() 
    { 
     var db = Database.Open("razortest"); 
     var selectQueryString = "SELECT * FROM tbl_stasjon ORDER BY nr"; 
     return db.Query(selectQueryString); 
    } 
} 

然後在你的腳本,你可以這樣做:

@foreach(var row in MyClass.GetData()) { 
    html here... 
} 

將有可能更優雅,高性能的方式來實現這但他們取決於你在做什麼。爲了遵循教程,這應該符合您的目的。

0

您可以使用會話並嘗試使用控制器。

覆蓋OnActionExecuting控制器內(wihtin構造會話不可用)

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    base.OnActionExecuting(filterContext); 
    if (Session != null) 
     Session["selectedData"] = "Hello World"; 
} 

和動作

Public ActionResult View1(){ 
    return View(Session["selectedData"]; 
} 

在您的視圖中,你可以處理這個數據

@{ 
ViewBag.Title = Model; 
} 

這是一個字符串一個簡單的解決方案。您可以創建強類型視圖,並獲得處理視圖中這些數據的非常合適的方法。

+0

這不是一個MVC問題。 – Polynomial

相關問題