2011-01-04 3 views
2

내 코드는 충분히 간단하다 :내 asp.net mvc 양식이 GET 대신 POSTing하는 이유는 무엇입니까?

<% using(Html.BeginForm(FormMethod.Get)) %> 
    <% { %> 
     Search for in Screen Name and Email: <%: Html.TextBox("keyword", Request.QueryString["keyword"]) %> 
     <button type=submit>Search</button> 
    <% } %> 

내가 실행 해요 문제는 내가이 양식을 제출하면 값이 쿼리 문자열에 추가되지 않습니다 점이다. 대신 양식이 게시물 요청으로 제출하는 것으로 보입니다. 생성 된 HTML을 보면 다음과 같습니다.

<form action="/find/AdminMember/MemberList" method="post"> 
     Search for in Screen Name and Email: <input id="keyword" name="keyword" type="text" value="" /> 
     <button type=submit>Search</button> 
    </form> 

이유를 아는 사람이 있습니까? 이것은 나에게 꽤 단순하고 똑바로 보인다.

답변

7

BeginForm 도우미의 올바른 서명은 이것이다 :

<% using(Html.BeginForm("SomeAction", "SomeController", FormMethod.Get)) %> 
<% { %> 
    Search for in Screen Name and Email: 
    <%: Html.TextBox("keyword", Request.QueryString["keyword"]) %> 
    <button type="submit">Search</button> 
<% } %> 

당신이 routeValues 매개 변수 FormMethod.Get와는 아무 상관이없고 기본 동사로 POST를 사용하는 위치를 기본적으로 this signature를 호출 할 BeginForm(FormMethod.Get)을 쓸 때.

+0

ok ... 그들이 (Html.BeginForm (FormMethod.Get)) 작업을 사용하기를 바랍니다. 게시물은 작업과 컨트롤러를 명시 적으로 지정하지 않고도 작동합니다. 나는 왜 GETs가 이해하지 않는다. 최소한 런타임 오류가 발생한다고 생각합니다. – quakkels

+2

매우 짜증나지만, 모든 과부하를 살펴보면 실제로 할 수있는 방법이 없습니다. – hunter

+0

@quakkels와 같은 오버로드가 내장되어 있지 않지만 동일한 작업을 수행하기위한 확장 메소드를 쉽게 작성할 수 있습니다. –

0

FormMethod을 설정하는 자격을해야합니다

당신처럼 보이는 routeValues 매개 변수로 FormMethod.Get을 전달하는 BeginForm에 올바른 오버로드를 사용하지 않는 경우 다양한 오버로드에 대해 here을 확인하십시오.

관련 문제