2010-05-03 2 views
2

C# ASP.NET MVC 프로젝트가 있지만 컨트롤러가 F #으로 작성되었습니다.ASP.NET MVC F # 컨트롤러 동작 매개 변수 무시

몇 가지 이유를 들어, 다음 코드는 제대로 작동하지 않습니다

작업의 매개 변수가 겉으로는 무시됩니다

namespace MvcApplication8.Controllers 

open System.Web.Mvc 

[<HandleError>] 
type ImageController() = 
    inherit Controller() 

    member x.Index (i : int) : ActionResult = 
    x.Response.Write i 
    x.View() :> ActionResult 
...

http://localhost:56631/Image/Index/1

결과에 이 오류 메시지 :

매개 변수 사전 의 null 입력이 없습니다. 의 'System.Windows.Int32' . 선택 매개 변수 은 참조 유형, null 입력 가능 유형이거나 선택적 매개 변수로 선언되어야합니다.

Parameter name: parameters 

컨트롤러는 달리 잘 작동합니다. 많은 사람들이 F # MVC 코드를 작성 했으므로 내가 잘못 가고있는 아이디어가 있습니까?

+0

저는 F # 전문가는 아니지만 저는 UrlParameter.Optional로 정의 할 수 있습니다. –

+0

그건 내가 두려워 컴파일 오류를 제공합니다. 내가 그 유형을 봤 거든 그것은 컨트롤러보다는 라우팅에 사용되는 것 같습니다. –

답변

7

컨트롤러의 매개 변수 이름은 URL을 컨트롤러 호출로 변환하는 방법을 지정하는 매핑에 지정된 이름과 일치해야합니다. ,

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", 
      id = UrlParameter.Optional } // Parameter defaults 
); 

이름 id는 매개 변수의 예상 이름을 지정합니다 : 당신이 (당신이 너무 F 번호로 변환 할 수 있어야한다)을 Global.asax.cs 파일에 보면

는, 당신은 같은 것을 볼 것이다 그래서 당신은이 같은 id라는 이름의 매개 변수를 사용하는 F # 코드를 조정해야합니다 : 당신이 매개 변수는 선택하게하려는 경우가 Nullable<int> 유형을 사용할 수 있습니다

member x.Index(id:int) = 
    x.ViewData.["Message"] <- sprintf "got %d" id 
    x.View() :> ActionResult 

.

F #에서 제공하는 정적 유형 안전성에 익숙한 프로그래머의 경우 ASP.NET MVC가 컴파일 타임에 확인되지 않은 수많은 동적 테스트에 의존한다는 것은 다소 놀라운 일입니다. 나는 언젠가, F #에 대한 더 멋진 웹 프레임 워크가 있기를 바랄 것이다 :-).

+0

Dang it! 나는 그것에 대해 완전히 잊었다. 나는 이것이 ASP.NET MVC 기본 사항으로 되돌아가는 것을 잊어 버린 F # 관련 문제라고 확신했습니다. 감사합니다. –

0

경로 모양이 어떻습니까? 그것은 이드에게 라우팅 되는가? 이 경우 id를 i로 바꿉니다

+0

그게 다야 - 고마워! –

관련 문제