MVC 라우팅과 관련하여 여기에 많은 Q & A가 있습니다. 불행히도, 나는 아직도 내가 이해하지 못하는 라우팅에 관한 몇 가지 문제를 가지고있다.ASP.NET MVC 5에 대한 이해
맨 먼저 및 맨 먼저 - 내 컨트롤러에서 ActionResults를로드 할 수 있습니까?
예를 들어, 서로 다른 매개 변수를 사용하여 동일한 컨트롤러/동작에 대해 3 회의 요청을합니다.
- "/ MyController에/해봐요"
- "/ MyController에/해봐요/[Guid를 문자열]
- "/ MyController에/해봐요/[Guid를 문자열]/TYPEA
... 및 컨트롤러에서 나는이 방법을 가지고있다.
나는 각각의 오버로드 된 메소드가 그것을 할 것이라고 기대한다. 유일한 ActionMethod는 입력 한 매개 변수와 상관없이 DoSomething()입니다. 즉, DoSomething (String id) 및 DoSomething (String id, String type)은 완전히 무시됩니다.
public ActionResult DoSomething(String? id)
{
ViewBag.Title = "Do Something Conditionally";
return View();
}
나는이 시도조차
... 그냥 ... 무슨 일이 일어날 지 볼. 컴파일 오류가
오류 4 유형 '문자열' '선택 System.Nullable'
제네릭 형식 또는 메서드 에 매개 변수로 'T'를 사용하기 위해 에 nullable이 아닌 값 형식이어야합니다 발생합니다
참고 : 매개 변수는 문자열 (기술적으로 GUID)입니다. 정수가 아닙니다.
은 내가routes.MapRoute(
"MyController",
"MyController/DoSomething/{id}",
new { controller = "MyController", action = "DoSomething", id = "" }
);
작업 한 오버로드 된 메서드를 얻을 수 ... 여전히 해봐요 수 있다면 단지 (보고 나는/App_Start/RouteConfig 클래스의 노선을지도하는 데 필요한 아마 생각이 시도 String id) ActionResult가 호출되지 않았습니다. 오류도 예외도 없습니다. MapRoute를 지정하지 않은 경우에도 마찬가지입니다.
여기에 누락 된 것이 있습니까? 당신이 제공 할 수있는 통찰, 지시,지도는 크게 감사 할 것입니다.
라우팅이 작동하지 않습니다. 원하는 것을 얻을 수 있지만 좀 더 복잡하고 라우팅 제약 조건 및 기타 요인을 사용해야합니다. 지금은 설명 할 시간이 없지만 다른 사람들은 잘 할 수있을 것입니다. MVC는 특정 메소드에 대해 HTTP 동사 (get, post 등 ..) 당 하나의 동작 메소드 만 허용합니다. 따라서 Index() 및 Index (string x)를 가질 수 있지만 서로 다른 동사 여야합니다. 이것은 모델 바인딩 메커니즘의 제한 사항입니다. MVC는 HTTP 형식 필드 또는 쿼리 문자열과 연결된 형식이 없으므로 선택할 오버로드를 알지 못합니다. –
글쎄 - 나는 그것이 정착한다고 생각한다. 감사합니다 Erik - 통찰력에 감사드립니다. 이 문제를 해결할 수 있는지 라우팅 제약을 살펴 보겠습니다. –
좋아요. 음, 확실하게 도움이 될 일의 특정 측면을 얻을 수있었습니다. DoSomething (String id)와 같은 DoSomething() ActionResult 메서드가없는 ActionResult가있는 것으로 나타났습니다. 매개 변수를 조건부로 사용하거나 사용하지 않고이 메서드를 사용할 수 있습니다. 문자열로만 테스트했지만 작동합니다. 삽입 및 미리 채워진 양식의 새 양식에 대해 동일한 조치 및보기를 사용하면 충분합니다. –