0

ASP.net と VB.Net を Visual Studio 2012 Web のコード ビハインドとして使用して、(ブートストラップで) 非常に単純なデータ入力アプリケーションを開発しています。

ファーストネームを取得するための次の html があるとします。

   <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>

およびその値を処理するための対応するコード ビハインド:

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

runat="server"html の firstname フィールドで使用したくないとします。Request.Form("firstname").ToStringtag を設定した場合にのみ機能することがわかりname="firstname"ます。タグのみを設定した場合idnameタグではなく)、それは考慮されません。私の場合、サーバー側にのみ<input type="text" class="form-control" id="firstname" placeholder="" style="max-width:450px" maxlength="60" />がある場合Request.Form("firstname")は、NULL を返します。

私もRequest.Form運が悪いです。タグNameValueCollectionのみを設定したコンポーネントでコレクションが満たされていることがわかります。name

私の質問は、ID のみを設定した html コンポーネントを操作するためにサーバー コードを変更することは可能ですか?

4

1 に答える 1

2

サーバー側コントロールの使用をオプトアウトすると、値を読み取る Request コレクション メソッドが残ります。

コード ビハインドは、バックエンドに送信されたデータのみを読み取ることができます。お気に入りのブラウザーの [ネットワーク] タブでリクエスト (フォームを送信したときに要求されたページ) を調べると、送信されたデータを示すセクションが見つかります。その入力フィールドに名前を設定していないため、データはサーバーに送信されません。それがあなたがそれを読むことができない理由です。ID は、サーバーに送信される内容には影響しません。ID は、クライアント側での使用のみを目的としています。Runat="server" を追加すると「機能する」理由は、フレームワークが「__VIEWSTATE」(または何か) という名前の秘密の隠し入力フィールドに情報を追加するためです。

最終的に、HTML の仕組みでは、フォームを送信すると、すべての入力要素がフォーム name=value で送信され、名前を省略したため、データは送信されません。

投稿の下のコメントが示唆するように、サーバー側のコントロール (runat="server") の使用を検討するか、フォーム要素に name タグを追加する必要があります。

多くの人がasp.net Webフォームを好まないことは知っていますが(実際、私もファンではありません)、他の選択肢があります-論理シフトは、代わりにasp.net mvcに移行することです. 何をするにしても、フレームワークの仕様をオプトアウトする場合は、html5 標準に準拠する必要があります。

幸運を :)

于 2016-06-03T09:14:16.483 に答える