ASP.NET MVC 미리보기 4 지 Url.RouteUrl()등입니다.를 사용하여 기존의 매개변수
-
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 })