2016-06-03 1 views
0

Visual Studio 2012 웹에서 ASP.net 및 VB.Net을 코드로 사용하여 매우 간단한 데이터 입력 응용 프로그램 (부트 스트랩에서)을 개발 중입니다. 내가 runat="server"를 사용하지 않는 가정Request.Form은 이름 태그에서만 작동합니까?

Protected Sub btnSubmit_ServerClick(sender As Object, e As EventArgs) 
    Dim fname As String = Request.Form("firstname").ToString 
End Sub 

: 뒤에 그 값을 처리하기 위해

<form id="form1" runat="server"> 
    <div style="padding:20px"> 
     <div class="form-group"> 
     <label for="firstname">Firstname</label> 
     <input type="text" class="form-control" id="firstname" name="firstname" placeholder="" style="max-width:450px" maxlength="60" /> 
     <small class="text-muted">Enter your first name.</small> 
     </div> 
     <button runat="server" type="submit" class="btn btn-primary" onserverclick="btnSubmit_ServerClick" >Submit</button> 

    </div> 
    </form> 

하고 해당 코드 :

내가 FIRSTNAME을 얻을 수있는 다음과 같은 HTML이 있다고 가정하자 내 html firstname 필드에. 그 Request.Form("firstname").ToStringname="firstname" 태그를 설정했을 때만 작동합니다. id 태그 (name 태그가 아님) 만 설정 한 경우이를 고려하지 않습니다. 내 경우에 <input type="text" class="form-control" id="firstname" placeholder="" style="max-width:450px" maxlength="60" />Request.Form("firstname") 만 있으면 서버 측에 NULL이 반환됩니다.

나는 또한 행운이없는 Request.Form을 시도합니다. 컬렉션 NameValueCollectionname 태그 만 설정 한 구성 요소로 채워져 있습니다.

그리고 내 질문은 그들이 자신의 ID 만 설정 한 html 구성 요소로 작업하기 위해 내 서버 코드를 변경할 수 있습니까?

+1

내가 사용하는 것이 좋습니다 [서버 컨트롤 (https://msdn.microsoft.com/en-us/library/zsyt68f1.aspx) (텍스트 박스, 버튼 등) 따라서 값을 강력하게 입력 할 수 있습니다. –

+0

아니요, 요청에 대해 이름값 쌍만 가져올 것입니다. ID는 서버에 전송되는 것이 아닙니다 – Icepickle

+1

@UweKeim 님이 제안 해 주신 것에 감사드립니다. 나는 동의한다, 그러나 나의 질문은 단지 지식 목적을위한 것이고, 우리는이 방식으로 수백 html 필드를 가진 기존의 코드를 가지고있다. –

답변

2

서버 측 컨트롤 사용을 선택 해제하면 값을 읽는 요청 수집 방법이 남아 있습니다.

코드 숨김은 백엔드로 보낸 데이터 만 읽을 수 있습니다. 선호하는 브라우저의 네트워크 탭에서 요청 (양식을 제출할 때 요청한 페이지)을 검사하면 전송 된 데이터를 보여주는 섹션을 찾을 수 있습니다. 그리고 입력 필드에 이름을 설정하지 않으므로 데이터가 서버로 전송되지 않습니다. 그것이 당신이 그것을 읽을 수없는 이유입니다. ID는 서버로 보내지는 것에 영향을주지 않습니다. ID는 클라이언트 측 사용을위한 것입니다. Runat = "server"를 추가 할 때 "작동"하는 이유는 프레임 워크가 "__VIEWSTATE"(또는 뭔가)라는 비밀 숨겨진 입력 필드에 정보를 추가하기 때문입니다.

결국 HTML이 작동하는 방식으로 양식을 제출하면 모든 입력 요소가 name = value 형식으로 보내지고 이름을 생략 했으므로 아무 데이터도 보내지 않습니다.

게시물의 의견과 같이 서버 측 컨트롤 (runat = "server")을 사용하거나 양식 요소에 이름 태그를 추가하는 것이 좋습니다.

많은 사람들이 asp.net 웹 폼을 좋아하지 않는다는 것을 알고 있습니다. (사실 저는 팬이 아닙니다.) 그러나 다른 대안이 있습니다 - 논리 이동은 asp.net MVC로 대신 이동하는 것입니다. 어떤 작업을 하든지, 프레임 워크 사양을 선택 해제하면 html5 스탠드 아트를 준수해야합니다.

행운을 빕니다 :)

관련 문제