2009-07-11 4 views
2

현재 사용자에게 특정한 키가 필요하고 마스터 페이지에있는 탐색 옵션이 필요합니다. 모범 사례에 대한 조언이 필요합니다.MVC에서 탐색 변수를 설정하는 방법 Masterpages

에서이 masterpage에서 왼쪽 탐색 메뉴에서 다음과 같은 링크가 '123'점포 ID 전류이다

http://www.example.com/manageShop/123

http://www.example.com/addProductToShop/123

http://www.example.com/addStaffToShop/123

사용자는의 관리자입니다.

<li><%= Html.ActionLink<ShopController>(x => x.ManageShop((int)Session["ShopKey"]), "Manage")%></li> 

나는 단지 세션에서 한 번 ShopKey을 설정해야로서이 좋은 아이디어라고 생각 : 나는

은 현재 내가이 효과에 뭔가를하려고 해요 masterpage이를 전달하는 방법이 필요 그것의 끝, 아래쪽은 당신이 열려있는 위치가 2 개의 탭 인 경우에 세션이 섞인 ㄴ다는 것을주의 된 iv이다.

<li><%= Html.ActionLink<ShopController>(x => x.ManageShop((int)ViewData["ShopKey"]), "Manage")%></li> 

그러나 이것은 당신이 모든 컨트롤러의 모든 행동에을 ViewData 설정을 유지해야 의미

는 다른 방법이 시도. 어느 것이 끔찍한가.

편집 : 나는 아래의 제안 유럽 연합 (EU)-GE-NE와 같은 필터에 alook 있었다,하지만 난 여전히 사방 ShopKey을 설정하는 문제를 가지고이 정말 내 문제를 해결 해달라고?

해결책은 무엇입니까?

public class UserKeyAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     filterContext.Controller.ViewData["UserKey"] = UserKey; 
    } 
} 

및 컨트롤러 또는 컨트롤러의 행동에

[UserKey] 
public class YourController : Controller 
{ 

// or 

public class YourController : Controller 
{ 
    [UserKey] 
    public ActionResult Index() 
    { 

를 사용하거나 Controller.OnActionExecuting을 (사용) (또는 이것에 대한 기본 컨트롤러를 만들 :

+1

컨트롤러가 기본 컨트롤러에서 파생되는 경우에는 끔찍하지 않습니다. 필요한 ViewData를 추가합니다. –

+0

어떻게 예를 들어 주시겠습니까? 기초가 어떻게 도움이 될지 알아보십시오 – Dan

답변

2

이 사용자 정의 필터를 만들 수 있습니다 Arnis L.이 말한 바와 같이) :

public class BaseController : Controller 
{ 
    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     filterContext.Controller.ViewData["UserKey"] = UserKey; 
    } 
} 

// and then derive your controllers from BaseController 

public class YourController : BaseController 
{ 
+0

이 줄에서 filterContext.Controller.ViewData [ "UserKey"] = UserKey; UserKey의 값을 설정하는 것은 무엇입니까? 문제를 해결하는 것보다는 문제를 옮기는 것이 아닙니다. – Dan

+0

댄, 내 대답은 "모든 컨트롤러의 모든 작업에 ViewData 설정에 관한 것입니다. 끔찍한 일입니다." 질문에서 코드를 게시 할 수 있습니까? Session [ "UserKey"]은 어떻게 설정 했습니까? http://www.example.com/manageprofile/123은 무엇입니까? 현재 사용자를위한 링크입니까 (이 경우 더 간단하게 사용할 수 있습니다 - 예 : http://www.example.com/manageprofile)? 또는 현재 사용자가 Admin이고 마스터 페이지에 일반 사용자의 프로필을 관리하는 링크가 여러 개 있습니까? –

+0

Eugene Im은 내 컨트롤러 액션 중 하나에서 Session [ "UserKey"]를 설정합니다. (논리적으로 설정해야하는 곳에서 코드 스 니펫이 아무 것도 설명하지 않을 것입니다.) 내보기는 요점을 설명하기 위해 고안된 것이지만 끝 부분에 열쇠가 굳이 필요합니다. – Dan

관련 문제