2016-11-22 12 views
2

에서 세 번째 매개 변수 가져 오기를 나는이 URL을 가지고 :나는 asp.net MVC 웹 사이트를 asp.net MVC

Home/Index/ 

이 내가하고 싶은 하나 개의 동작이며, 현재 내가하고 있어요 이 같은 쿼리 문자열을 사용하여 :

Home/Index/?action=1 

그때 Request.QueryString["action"]를 사용하여 내 코드에서 그것을 얻을 수 있습니다.

그러나이 예상대로 좋은 보이지 않는, 나는 이런 식으로 뭔가를 싶습니다

Home/Index/Action 

그래서 쿼리 문자열은 세 번째 매개 변수가 될 것입니다. 이것을 어떻게 사용하고 세 번째 매개 변수가 존재하고 이름이 맞는지 확인하십시오.

내 경로는 다음과 같이 구성됩니다

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

내가 경로에 어떤 변경이 필요하거나 그냥 내가 원하는 방식으로 입력 할 수 있습니다, 그렇다면 어떻게이 값을 검색해야합니까?


편집 :

좋아. 내가 원했던 것은이 매개 변수에 따라보기에서 다른 결과를 얻는 것이 었습니다.

내가 지금 한 것은 ViewData에 다른 값을 보내는 동일한보기를 사용하는 두 개의 ActionResults을 만듭니다.

+0

asp.net 웹 API 2를 사용하여 라우팅 특성을 사용하여이 문제를 해결할 수 있다고 생각합니다. https://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing -in-web-api-2 및 여기에 mvc 특성 라우팅에 대한 자세한 내용이 나와 있습니다. https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/ – Vinod

답변

4

MVC에는 모델 바인딩이라는 개념이 있습니다. 여기서는 매개 변수의 이름을 사용하고 양식의 값으로 채우지 않아도됩니다.

이 같은 액션 방법 작성하는 경우 :

public ActionResult Index(int action) 
{ ... } 

그때 이미 /Home/Index?action=1을 위해 작동합니다.

당신은 가장 쉬운 방법은 단순히이 같은 작업 방법 작성하는 것입니다 /Home/Index/1과 같이 호출 할 수있게하려면 : 후 뭔가가있는 경우 MapRoute 정의는 기본적으로 '라고 때문에이 작동

public ActionResult Index(int id) 
{ ... } 

을 그런 다음 {Action} 부분 (이 경우에는 "색인")을 입력 한 다음 매개 변수 이름 {id}을 지정하고 내 조치 방법의 {id} 매개 변수에 바인딩하십시오.


업데이트 :
모두 호출 시나리오 action라는 매개 변수를 사용하여 문제는 {action}는 MVC에서 특별한 키워드 것입니다.모두 호출 시나리오에 대한 MySpecialParam을 사용하려면
, 당신은 그냥이 노선 추가 할 수 있습니다 MySpecialParamaction가되고 있었다 그러나 경우

routes.MapRoute(
    name: "Default_MySpecialParam", 
    url: "{controller}/{action}/{MySpecialParam}", 
    defaults: new { controller = "Home", action = "Index", MySpecialParam = UrlParameter.Optional } 
); 

을 다음 MVC는 아마 모를 것이다 이름 확인 충돌이 처리 방법 또는 오류가 발생할 수 있습니다.

+0

이 댓글 확인 http://stackoverflow.com/questions/40741029/get-third-parameter-in-asp-net-mvc#comment68708248_40741205 – Phiter

+0

내 업데이트보기 ... –

0

조치는 컨트롤러 바로 다음에 있어야합니다. 나는 당신이 원하는 경우 새로운 컨트롤러를 추가하는 것이 더 나을지도 모른다고 생각합니다.

+0

문제는 동일한보기를 사용해야한다는 것입니다. 유사한 데이터를 전달하면서 동일한보기를 사용하는 두 가지 작업이 있으면 더 낫다고 생각합니까? – Phiter

0

매핑 경로가 포기했습니다. 번거 롭기 때문에 매핑 경로를 포기했습니다. 당신은 다음과 같은 매개 변수의 모든 번호의 새 경로를 추가해야합니다

routes.MapRoute(
     "ThreeIds",         // Route name 
     "{controller}/{action}/{firstId}/{secondId}/{thirdId}" // URL with parameters 

     ); 

routes.MapRoute(
     "Dates",        // Route name 
     "{controller}/{action}/{startDate}/{endDate}"  // URL with parameters 

     ); 

대신 jQuery를 같은 것을 사용하여 AJAX 호출을 수행하십시오. 모든 가능성을위한 경로를 추가하는 신경 쇠약.

$.ajax({ 
      url: '../' + controller + '/' + method, 
      data: jsonObjectString, 
      contentType: 'application/json', 
      dataType: 'json',    
      success: function (data) { 
       //do something 
      }, 
      error: function (err) { 
       //do something 
      } 
     }); 

내 라이브러리 https://github.com/Biot-Savart/MVC-DataCall.js을 사용하면 좀 더 쉽게 생활을 즐길 수 있습니다.