2014-05-14 4 views
0

작동하지 않습니다 내가 매개 변수 page를 전달하는 경우경로 선택적 매개 변수 나는이 규칙 definded 한

routes.MapRoute(
    name: "NameOfRule", 
    url: "general-list/all-operation/{typeEstate}/{page}", 
    defaults: new { controller = "PropertyListings", action = "Sale", page = UrlParameter.Optional }, 
    namespaces: new[] { ControllerName.Namespace } 
); 

public ActionResult Sale(string typeEstate, int page) 
{ 
    //... 
} 

이 잘 작동을하지만하지 않으면이 실패하고 오류가 당신은 page 필요 "입니다 또는 null (int?)이어야합니다 "

매개 변수 page은 선택 사항이라고 가정하기 때문에 이해할 수 없습니다. 물론 클래스 변경을하면 올바르게 작동합니다 :

public class MyModel 
{ 
    public string TypeEstate { get; set; } 

    public int Page { get; set; } 
} 

public ActionResult Sale(MyModel model) //string typeEstate, int page) 
{ 
    //... 
} 

답변

0

경로 및 경로 일치에 관한 한 선택 사항입니다. 그러나 함수에 해당 매개 변수의 널값을 허용하지 않으면 함수는 특정 값을 널 값으로 지정할 수 없습니다. 따라서 값이 존재하지 않으면 경로가 일치하지만 함수가 null (또는 int id = 0과 같은 선택적 값)을 취하도록 설정되어 있지 않으므로 null 참조 예외와 함께 실패합니다.

초기화 작업을 수행하지 않은 정수의 기본값이 0이기 때문에 클래스를 전달하는 이유는 무엇입니까 (단, int 기본값은 null입니다). 그래서, 비록 당신이 결코 "새롭게"나오지 않았다고해도 결코 가치가 없습니다.