ASP.NET MVC 미리보기 4 지 Url.RouteUrl()등입니다.를 사용하여 기존의 매개변수

StackOverflow https://stackoverflow.com/questions/49194

  •  09-06-2019
  •  | 
  •  

문제

나는이 같은 행동:

public class News : System.Web.Mvc.Controller
{
    public ActionResult Archive(int year)
    {
       / *** /
    }
}

로 다음과 같다:

routes.MapRoute(
           "News-Archive",                                              
           "News.mvc/Archive/{year}",                           
           new { controller = "News", action = "Archive" }
       );

URL 에 내가에서입니다:

News.mvc/Archive/2008

나는 형태로 이 페이지에서 다음과 같다:

<form>
    <select name="year">
        <option value="2007">2007</option>
    </select>
</form>

제출하는 형태로 가야하는 소식입니다.mvc/Archive/2007 면'2007 년'에서 선택한 형태입니다.

이 필요 형태로'액션'특성을"소식입니다.mvc/아카이브"입니다.

까지,남녀노소 누구나 좋아합니다를 선언 양식을 다음과 같다:

<form method="get" action="<%=Url.RouteUrl("News-Archive")%>">

그것으로 렌더링:

<form method="get" action="/News.mvc/Archive/2008">

할 수 있는 누군가가 알려주시기 바랍 나가 없는가?

도움이 되었습니까?

해결책

당신은 몇 가지 문제,나는 생각한다.

첫째,당신의 경로를 없에 대한 기본값"년,그래서는"URL"/뉴스입니다.mvc/아카이브"는 실제로 유효하지 않은 라우팅을 위한 목적입니다.

두번째,당신이 기대 형태로 값을 보이터를 매개 변수이지만,그의하지 않는 방법 HTML 작동합니다.사용하는 경우에는 일반 형식으로 선택하고 제출하고,Url 끝날 것을"?년=2007"그들의 끝.이것은 단지 어떻게 얻는 방법 형태에서 작동하도록 설계되었습니다.

그래서 당신은 올 필요가 일부에 대해 결론 무엇이 중요합니다.

  • 하려면 사용자가 선택할 수 있게 무언가에서 드롭다운 변화는 제출 URL,그리고 당신이 자바스크립트를 사용하여 달성한 이(가로채의 양식을 제출하고 공식화 정확한 URL).
  • 만약 당신이 좋/뉴스입니다.mvc/보관?년=2007 으로 URL 을 제거해야 합{해}지 경로에서 완전히이다.당신은 여전히 떠날 수 있는"int"올해에서 매개변수는 당신의 활동,이후 양식을 값도 채우기 작업 방법이 매개 변수입니다.

다른 팁

고 생각했는 이유-경로 포함되어 있{해}그래서 생성되는 경로는 항상 너무 것입니다..

사람이 이것을 확인할 수 있습?

솔루션

좋아요 여기에는 이 솔루션,(덕분에 브래드를 선도하는 날)입니다.

1)필요한 기본 값에서 경로:

routes.MapRoute(
       "News-Archive",                                              
       "News.mvc/Archive/{year}",                           
       new { controller = "News", action = "Archive", year = 0 }
   );

2)추가로 리디렉션 분석을 얻을 매개 변수를 하지만 그들은 URL 의 세그먼트가 있습니다.

public ActionResult Archive(int year)
{
   if (!String.IsNullOrEmpty(Request["year"]))
   {
       return RedirectToAction("Archive", new { year = Request["year"] });
   }
}

3)가 있는지 확인을 리디렉션 코드 요청에 대한 params 코드 리디렉션에"기본"년 항목이 있습니다.즉

public ActionResult Archive(int year)
{
   if (!String.IsNullOrEmpty(Request["year"]))
   {
       return RedirectToAction("Archive", new { year = Request["year"] });
   }
   if (year == 0)
   {
       /* ... */
   }
   /* ... */
}

3)명시적으로 지정의 기본값이 올해에는 Url 이 있습니다.RouteUrl()호출이:

Url.RouteUrl("News-Archive", new { year = 0 })
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top