2011-07-04 3 views
0

에 나는 (간단하게하는) 내 HomeController에서 작업을해야/MyAction. HomeController에서 MyAction 메서드를 찾을 수 없다는 불만이 있으며 viewModel 매개 변수 때문에 이것이 의심 스럽습니다.ASP.NET MVC3 게시 양식 다시 같은 동작

이 문제를 해결할 방법이 있습니까? viewModel 매개 변수가 null 일 것으로 예상됩니다.

+0

메서드에 대한 HttpGet 및 HttpPost 필터 값이 확실하지 않습니다. 그들이 제거되면 어떻게됩니까? MyOwnViewModel에 기본 생성자가 있습니까? 매개 변수없이 정의하면 동작이 호출됩니까? –

+0

또한 @model 선언을 사용하여 면도기를 사용하고 viewmodel을 지정하고 있습니까? –

+0

@Zootius, 기본 생성자는 분명히 중요하지 않습니다. 그러나 당신이 언급 한대로 [HttpGet]과 [Http Post]를 제거하는 것이 중요합니다. 귀하의 의견을 보내 주셔서 감사합니다! – Peter

답변

1

대답이 필요 하나 또는 [HttpGet][HttpPost] 액션 필터를 모두 제거하는 것입니다.

다른 사람을 교화하는 데있어 모델 클래스에 공용 기본 생성자가있는 경우 대체 매개 변수없는 버전의 메서드가 없어도 모델 매개 변수를 허용하는 동작 방법을 사용할 수 있습니다.

MVC ModelBinder는 모델 클래스의 빈 인스턴스를 생성합니다.

맞춤 모델 바인딩에 대한 자세한 내용은 IModelBinder 인터페이스를 살펴보십시오.

+0

고마워요,이게 내 문제를 해결했습니다 :-) – Peter

0

당신은 아직 그 뷰에서 (HttpGet 또는 HttpPost 속성이 적용 곳이다) 제출 된 작업을 처리 할 수있는 일을 URL

public ActionResult MyAction() 
{ 

    return View(); 
} 

에서 시작하고 사용할 수 없음 매개 변수를 사용하여 하나 개의 조치가 필요한 그때까지 viewModel이됩니다.

+1

그건 맞지 않아. 당신은 매개 변수없는 행동 방법을 필요로하지 않습니다. 전달하는 클래스에 기본 생성자가 있고보기에 지정된 유형 인 경우 MVC가 인스턴스를 만듭니다. –

+0

@ Zootius, 나는 방금 OP가 매개 변수를 전달하는지 또는 none 매개 변수를 사용하여 시작해야 하는지를 말했습니다. 아니면 다른 말하고있는거야? – Bolu

+0

@Zootius가 맞습니다. 매개 변수없는 액션 메소드가 필요하지 않습니다. 하나 이상의 HttpVerb 속성을 지정할 수 없습니다. – Peter

0

내가 아는 한, URl을 방문하여 자신의 견해 모델을 당신의 행동에 전달해야하는 이유는 무엇인지, 왜 당신이 언급 한 시나리오를 주선했는지, 나는 당신이 누락 된 행동을 고치도록 도울 것입니다. 동작 및 ASP.NET MVC에서 검색 가능하게하는 방법에 대해 설명합니다.

viewModel 매개 변수 때문에 올바른지, MVC3의 기본 경로는이 작업을 찾지 못하므로 컨트롤러 작업과 일치하는 새 경로를 정의해야합니다. 당신이 할 수있는, 그래서 앱 라우팅 테이블, 당신의 행동 방법을 알고 있어야

routes.MapRoute(
      "SearchRoute1",            // Route name 
      "MyAction/{viewModel}",        // URL with parameters 
      new { controller = "Home", action = "MyAction", viewModel = "" } // Parameter defaults 

     ); 

가 특별히 RegisterRoutes(RouteCollection routes) 방법 안에, 당신의 Global.ASAX 파일 내부에 이런 식으로 뭔가를 정의합니다 :

다음 코드를 고려 요청을 정상적으로 처리하십시오.

도움이되었는지 알려주세요. 감사합니다.

+1

그건 맞지 않아. 당신은 매개 변수없는 행동 방법을 필요로하지 않습니다. 전달하는 클래스에 기본 생성자가 있고보기에 지정된 유형 인 경우 MVC가 인스턴스를 만듭니다. –

+0

그가 호출하려고하는 것은 매개 변수가있는 작업이며 실제로 호출하는 것은 MVC3에서 생성하는 기본 동작입니다.이 호출에서는 매개 변수가없는 호출이 아니라 매개 변수가없는 호출이 사용됩니다. 내 대답에는 코드가 포함되어 있지 않습니다. 매개 변수없는 동작. 친절하게도 내가 틀렸다면 나를 바로 잡아라. –

+1

문제는 OP의 컨텍스트에 대해 아직 충분히 알지 못한다는 것입니다. MyAction에 매개 변수가없는 정의가 없다고 가정합니다. ** MyAction (MyOwnViewModel viewModel) ** 메서드 *는 모델을 전달하지 않아도 호출해야합니다. . –

0

ActionResult에는 두 가지 다른 HTTP 메소드가있을 수 없습니다. 당신이 경우에 ... 오버로드를 사용하는

public ActionResult MyAction() 
{ 
    return View(new MyViewModel()); 
} 

그리고

[HttpPost] 
public ActionResult MyAction(MyViewModel model) 
{ 
    // Do your stuff... 
    return View(model); 
} 
+0

네 말이 맞아, 나는 너의 말씨가 꺼져 있다고 생각해. POST와 GET을 모두 동일한 작업으로 수행 할 수 있습니다. 그러나 속성을 사용하여이를 지정할 수는 없습니다. GET 및 POST 속성을 제거한 경우에만 작동합니다. – Peter

+0

알다시피, 나는 그것을 어떻게 말로 잘 모르겠다! 나는이 방법을 선호하는데, 나에게 읽기 쉽다. – simonlchilds

관련 문제