2010-06-22 79 views
0

因此,我有一個主頁,其中有一個圖像whos源是控制器操作返回文件流。在基於登錄用戶的主頁上顯示圖像

每個登錄用戶的圖像都會有所不同。

現在在我的母版頁視圖我有這個代碼,這依賴於viewdata。

<img id="dealerlogo" src='/Files/DealerImage/GetDealerLogo/<%=Html.Encode(ViewData["dealerid"]) %>' alt="" /> 

顯然這個問題是我需要提供包含ID 上everycontroller行動恢復使用該母版頁,這是幾乎所有的人的視圖的可視數據。 有沒有更好的方法來做到這一點?喜歡有沒有辦法在視圖中獲取用戶名? 謝謝!

回答

1

您可以像創建新的asp.net MVC站點時爲您創建的默認logonusercontrol.aspx一樣使用Page.User.Identity.Name。因此,對於你

Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b> 

,你會想是這樣的:

<img id="dealerlogo" src='/Files/DealerImage/GetDealerLogo/<%=Html.Encode(Page.User.Identity.Name) %>' alt="" /> 
+0

這就是我正在尋找的完美!謝謝! – twal 2010-06-22 14:19:45

0

我假設你GetDealerLogo操作方法有dealerid的參數。最好是寫下類似的東西:

<img src="<%= Url.Action("GetDealerLogo", "DealerImage", new { dealerid = ViewData["dealerid"] }) %>" /> 

傳遞它通過ViewData沒有錯。您也可以考慮使用strongly-typed View或您自己的ViewPage base class,這會暴露DealerId屬性。

爲了使它更乾淨,我真的很喜歡T4MVC。這將允許你寫:

<img src="<%= Url.Action(MVC.DealerImage.GetDealerLogo(dealerid)) %>" /> 

而且,更進一步,您可以創建一個Html helper,所以你可以寫:

<%= Html.DealerLogo(dealerid) %> 
2

你可以很容易地在[ChildActionOnly]行動,返回一個封裝這一邏輯局部視圖,然後使用新的MVC 2方法

<% Html.RenderAction("GetUserPhoto", "User"); %> 

在您的視圖頁無處不在,而無需在所有操作中傳遞ViewData。

這裏的解決方案:

[ChildActionOnly] 
public ActionResult GetUserPhoto() 
{ 
    ViewData["UserId"] = Page.User.Identity; 
    return PartialView(); 
} 

而且在你看來,你用你用來顯示用戶圖像相同的邏輯。您也可以直接發送FileResult到局部視圖來爲您呈現圖像。在這種方法中,您無需在所有視圖中重複ViewData["XXXX"],只需在主視圖中渲染新的局部視圖。

+0

我真的很喜歡這種方法,謝謝。 – twal 2010-06-22 20:24:17

相關問題