2010-05-09 2 views
1

내가 가진 가정 사용자가 양식을 제출의 메뉴에서 선택을하고 다음과 같이 나는 URL을 다른 페이지로 링크를하고자 할 때 웹 페이지내 경로 구성에서 상수 URL을 어떻게 참조합니까?

<% using (Html.BeginForm("ShowData", "Summary")) %> 
<% { %> 
<div class="dropdown"><%=Html.DropDownList("CourseSelection", Model.CourseList, new { @class = "dropdown", onchange="this.form.submit();" })%> </div> 
<% } %> 

내에서 다음

http://localhost:1721/Summary 

내가 가지고있는 다음과 같은 경로 :

사용자가 드롭 다운리스트에서 항목을 선택
routes.MapRoute(null, "Summary", new { controller = "Summary", action = "ShowData", CourseSelection = (string) null }); 

    routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Login", action = "Index", id = UrlParameter.Optional }); 

이 반환 된 URL은 다음과 같습니다

http://localhost:1721/Summary/ShowData?CourseSelection = UserSelection 

분명히 목록의 첫 번째 경로가 일치하지 않습니다.

URL에 작업 이름과 매개 변수가 표시되는 것을 원하지 않습니다. 간단히 URL에 코드화 된 "요약"을 표시하기 만하면됩니다. 이것을 어떻게 성취합니까?

답변

2

여기서 문제는 경로는 경로의 URL (일명 "요약")의 일부가 아닌

널 (null) 디폴트 값

CourseSelection = (문자열)을 가지고 있다는 것입니다.

URL의 매개 변수가 이 아니고 URL에이 아닌 경로의 기본값이있는 URL을 생성 할 때 특별한 논리가 있습니다. 지정한 매개 변수는 기본값과 일치해야합니다.

그래서이 문제를 해결하는 또 다른 방법은 다음과 같습니다 그러나

using (Html.BeginForm("ShowData", "Summary", 
    new {CourseSelection = (string)null})) { 
    ... 
} 

, 당신은 행동이 값을 게시하고 있기 때문에 당신이 당신의 경로에서 기본으로 CourseSelection을 왜, 내가 볼 수 없습니다. 액션 메서드 매개 변수로 필요하고 게시 된 양식 데이터에있을 때 자동으로 바인딩됩니다.

그래서 다른 솔루션과 같이 경로를 변경하는 것입니다 : 회신 지연에 대해

routes.MapRoute(null, "Summary", 
    new { controller = "Summary", action = "ShowData" }); 
0

이의 HTML 소스를 볼 수 ,

<% using (Html.BeginForm("UpdateView", "MyController")) %> 
    <% { %> 
    <div class="dropdown"><%=Html.DropDownList("Selection", Model.List, new { onchange="this.form.submit();" })%></div>   
    <% } %> 

당신은 액션이 비어 있음을 알 수 있습니다. 이는 도우미가 BeginForm에서 제공 한 경로를 기반으로 경로를 찾을 수 없기 때문입니다.

Global.asax의 정의에 따라 모든 요청은 기본적으로 색인 작업 메서드로 설정됩니다. 당신이 원하는 무엇을 대신한다 :

routes.MapRoute("Default", "{controller}/{action}", new { controller = "Home", action = "Index" }); 

참고 URL 패턴 작업의 additon.

이것은 저에게 적합합니다.

Global.asax에

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(null, "Summary", new { controller = "Summary", action = "ShowData", CourseSelection = (string)null }); 

    routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Login", action = "Index", id = UrlParameter.Optional }); 

} 

SummaryController

공용 클래스 SummaryController : 컨트롤러 { // // GET :/요약/기본보기

에서

public ActionResult Index() 
{ 
    return View(); 
} 

public ActionResult ShowData(string CourseSelection) 
{ 
    return View(); 
} 

코드

<% 
    var list = new List<string> { "a", "b", "c" }; 

    var selList = new SelectList(list); %> 
<% using (Html.BeginForm("ShowData", "Summary")) %> 
<% { %> 
<div class="dropdown"> 
    <%=Html.DropDownList("CourseSelection", selList, new { @class = "dropdown", onchange="this.form.submit();" })%> 
</div> 
<% } %> 

}

+0

죄송합니다. 더 많은 연구를 해왔지만 mvc에서 맞춤 라우팅이 작동하는 방식을 이해하는 데 어려움을 겪고 있습니다. 원래 게시물을 편집했습니다. 아직도 도울 수 있니? –

관련 문제