2011-12-14 46 views
0

在C#中使用ASP.Net MVC3。使用ViewData在剃刀視圖中處理單個記錄

目前我正在嘗試將單個數據庫記錄傳遞到我的視圖頁面以創建我自己的廣告輪播。

這是我的控制器代碼。

var rand = new Random((int) DateTime.Now.Ticks); 
int numIterations = 0; 
numIterations = rand.Next(1, 2); 

CJAd cjad = db.CJAds.Single(c => c.category_id == 1 && c.ad_active == true && c.id == numIterations); 

ViewData["SideBarAd"] = cjad; 

我看到的每個代碼示例都顯示瞭如何循環執行多個記錄。如何將視圖頁面上的ViewData轉換爲數據庫對象並顯示它?

它嘗試這樣

@ViewData["SideBarAd"].ad_url 

但收到的錯誤

CS1061:「對象」中不包含關於「AD_URL」和沒有擴展方法「AD_URL」接受型的第一參數'的定義對象可以找到(是否缺少using指令或程序集引用?)

+0

你想在ViewData的視圖頁 – 2011-12-14 23:34:50

回答

1

爲什麼你不只是在你的視圖模型中包含CJAd?這簡單得多。

但是,如果您確定了,請改用ViewBag,然後您不需要投射。

ViewBag.SideBarAd = cjad; 
在你看來

(假設SideBarAd是一個字符串,它是URL到您的廣告)

<img src="@ViewBag.SideBarAd"/> 
1

你可以試試這個:

<div>@ViewBag.SideBarAd.SomeProperty</div> 

其中SomeProperty是您想要在視圖中顯示的CJAd類的屬性。

這是說,我會使用視圖模型,而不是ViewData的的建議你:

public ActionResult Foo() 
{ 
    var rand = new Random((int) DateTime.Now.Ticks); 
    int numIterations = 0; 
    numIterations = rand.Next(1, 2); 
    var cjad = db.CJAds.Single(c => c.category_id == 1 && c.ad_active == true && c.id == numIterations); 

    return View(cjad); 
} 

,然後在相應的強類型的視圖:

@model AppName.Models.CJAd 
<div>@Html.DisplayFor(x => x.SomeProperty)</div> 

而且所有網頁上您顯示廣告可以看看Html.Action helper。它可以極大地簡化您的代碼並將其與控制器的主邏輯分離。

+0

我會包括多個上顯示一個對象數據庫查詢在一個頁面中,因此我不會將該頁面設置爲廣告模型的獨佔頁面。 – 2011-12-14 23:41:03

+0

@GregGoodwin,當然可以。你應該定義一個視圖模型。視圖模型是一個包含視圖需要的所有信息的類。因此它將包含包含廣告的屬性,並且它將具有關於您需要的其他內容的屬性。然後在控制器操作中,您將彙總所有這些信息並將單個視圖模型傳遞給視圖。在視圖中,您將獲得Intellisense和強大的打字功能。 – 2011-12-14 23:42:23