2010-02-15 2 views
0

ActionParameter가 비어있을 때 Action Filter에 기본값을 설정하려면 어떻게해야합니까? 조치 매개 변수 No Key 일 때 기본값 추가

나는 그것이 전달 SectionID 매개 변수을 집어으로 필터가 잘 작동 내 컨트롤러에 소개Area_1419 작업를 사용

. 색인 작업을 사용할 때 아래 오류가 발생합니다 ....

주어진 키가 사전에 없습니다. 그것은 단지 특정 섹션에 적용되는이 라인에 ...

var GetSectionID = filterContext.ActionParameters["SectionID"]; 

나는 각 컨트롤러 액션에 SectionID 매개 변수를 추가하지 않는 나는 각에 필터를 추가하지 않으 필터가 이러한 페이지에도 영향을 미침.

SectionID에 값이 없으면 필터 내에서 SectionID의 기본값을 설정할 수 있습니까?

CategoriesAttribute

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 

namespace Website.ActionFilters 
{ 
    public class CategoriesAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      var GetSectionID = filterContext.ActionParameters["SectionID"]; 
      var NoSectionID = 1; 

      if (GetSectionID == null) 
      { 
       filterContext.Controller.ViewData["SectionID"] = NoSectionID; 
      } 
      else 
      { 
       filterContext.Controller.ViewData["SectionID"] = GetSectionID; 
      }    
     } 
    } 
} 

홈 컨트롤러

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using Website.Models; 
using Website.ActionFilters; 

namespace Website.Controllers 
{ 
    [HandleError,Categories] 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     public ActionResult About(int SectionID) 
     { 
      return View(); 
     } 

     public ActionResult Area_1419(int SectionID) 
     { 
      return View(); 
     } 
    } 
} 

답변

3

ActionParameters는 사전입니다 먼저 ActionParameters.ContainsKey ("SectionID")를 통해 키를 확인하십시오. 사전을 사용하면 키를 확인하면 null을 반환하지 않지만 항상 키를 기대하기 때문에 예외가 throw됩니다.

if (filterContext.ActionParameters.ContainsKey("SectionID")) 
{ 
    //Code to process as section ID 
    filterContext.Controller.ViewData["SectionID"] = filterContext.ActionParameters["SectionID"]; 
} 
else 
{ 
    //Code to process as if no section ID 
    filterContext.Controller.ViewData["SectionID"] = 1; 
} 
+0

감사합니다. 저는 그만큼 액션 필터를 사용하지 않았습니다. ActionParameters.ContainsKey ("SectionID") 체크를 실제로 사용하려면 어떻게해야합니까? – Jemes

+0

위의 수정 된 응답. –

+0

브라이언 감사합니다, 완벽하게 작동합니다! – Jemes

관련 문제