asp.net-mvc
2010-06-22 4 views 0 likes 
0

그래서 원본 이미지를 가진 마스터 페이지에 파일 스트림을 반환하는 컨트롤러 동작이 있습니다.로그인 한 사용자를 기반으로 한 마스터 페이지에 이미지 표시

로그인 한 사용자마다 이미지가 달라집니다.

지금 내 masterpage보기에서 나는이 코드를 viewdata에 의존합니다.

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

분명이 가진 문제는 거의 모든 그들이다이 마스터 페이지를 사용하는 뷰를 반환 everycontroller 행동에 ID 을 포함을 ViewData를 제공해야한다는 것입니다. 더 좋은 방법이 있나요? 마찬가지로보기에서 사용자 이름을 올바르게 가져 오는 방법이 있습니까? 감사합니다.

답변

1

새 asp.net MVC 사이트를 만들 때 생성되는 기본 logonusercontrol.aspx와 마찬가지로 Page.User.Identity.Name을 사용할 수 있습니다.

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

내가 찾던 그게 전부! 고맙습니다! – twal

0

내가 당신의 GetDealerLogo 액션 메소드는 dealerid의 매개 변수가 가정

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

그래서 당신을 위해, 당신은 이런 식으로 뭔가를 원하는 것입니다. 다음과 같이 작성하는 것이 좋습니다.

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

ViewData를 통해 전달하는 데 아무런 문제가 없습니다. DealerId 속성을 노출하는 strongly-typed View 또는 ViewPage base class을 고려해 볼 수도 있습니다.

더 깨끗하게 만들려면 실제로는 T4MVC이 좋습니다. 당신이 Html helper을 만들 수 있습니다, 그래서 당신이 쓸 수있는, 더욱,

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

을 그리고 :

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

당신은 쉽게를 반환하는 [ChildActionOnly] 작업이 로직을 캡슐화 할 수 있습니다 그것은 당신이 쓸 수 것 다음 부분보기 및 모든 행동을 ViewData를 거치지 않고 사방보기 페이지에서 그것을 가지고 새로운 MVC 2 접근 방식을

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

를 사용합니다.

는 여기에 솔루션입니다 :

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

그리고보기에 당신은 당신이 사용자 이미지를 표시하는 데 사용되는 동일한 논리를 사용합니다. 또한 FileResult를 부분보기로 보내서 이미지를 렌더링 할 수도 있습니다. 이 방법에서는 모든 뷰에서 ViewData["XXXX"]을 반복 할 필요가 없으며 기본 뷰에서 새 부분 뷰를 렌더링하면됩니다.

+0

나는이 접근 방식을 정말 좋아한다. 고마워. – twal

관련 문제