2009-12-09 3 views
0

나는 ASP.NET을 사용하여 ADN 내보기에 다음 코드가 있어요 :HTTP-get에서 양식 값 가져 오기?

<% using(Html.BeginForm("Search", "Home", FormMethod.Get)) { %> 

<%= Html.TextBox("searchText") %> 
<input type="submit" value="Search" /> 

<% } %> 

을 내 컨트롤러에서 나는이 : 나는 검색 액션에 중단 점을 경우

public ActionResult Search(string searchText) 
    { 
     return View("Index"); 
    } 

및 textTextbox에 텍스트를 입력하더라도 항상 searchText 인수를 검사하십시오. formmethod를 POST로 변경하면 예상대로 작동합니다.

http-GET을 사용할 때 어떻게 "searchText"를 읽을 수 있습니까?

편집 :

나는 다음과 같은 경로

 routes.MapRoute(
      "Search",            // Route name 
      "Search/{searchText}",       // URL with parameters 
      new { controller = "Home", action = "Search", searchText ="" } // Parameter defaults 
     ); 

을했고 내가 검색 텍스트의 디폴트 값 (searchValue = "")를 제거 할 때, 나는 내 행동에 올바른 값을 얻었다. 왜?

+0

global.asax에서 기본이 아닌 라우팅 설정이 있습니까? 또한 브라우저에서 생성 된 페이지의 소스를 확인하십시오. – PanJanek

+0

나는 다음과 같은 경로를 설정 한 : routes.MapRoute ( 는 "검색", // 경로 이름 "를 검색/{검색 텍스트}", // 매개 변수를 URL = "홈" 새로운 {컨트롤러, 액션 = " Search ", searchText =" "} // 매개 변수 기본값 ); –

답변

2

Firebug 또는 Fiddler를 사용하여 실제 URI를 확인하십시오. 당신은 당신의 경로의 "searchText"부분을 가지고 있고, 당신도 "searchText"쿼리 문자열 매개 변수를 가지고 있다고 확신합니다.

URI의 경로 부분의 searchText 부분을 만들려면 HTML 양식에서 MVC 라우팅에 대해 알지 못하므로 JavaScript의 양식을 다시 작성해야합니다. 반면에 HTML 폼은 "out of the box"라는 쿼리 문자열 매개 변수를 처리하며, MVC는이를 경로에 포함하지 않고도 액션 인수에 바인딩합니다.

가장 쉬운 해결책은 경로에서 searchText를 모두 제거하고 쿼리 문자열 매개 변수를 사용하는 것입니다. 이 작업을 수행하기 위해 경로를 변경하는 것 외에는 아무 것도 할 필요가 없습니다.