Visual studio 2013 Request.form不';t在代码隐藏中使用Visual Studio 2013返回值

Visual studio 2013 Request.form不';t在代码隐藏中使用Visual Studio 2013返回值,visual-studio-2013,code-behind,textinput,asp.net-4.5,Visual Studio 2013,Code Behind,Textinput,Asp.net 4.5,我想我快瞎了。。。。!以下代码有什么问题? 使用Visual Studio 2013,“searchBox”不会返回值,但使用VS 2008时效果良好 代码隐藏 Partial Class _Default Inherits Page Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Response.Write(Re

我想我快瞎了。。。。!以下代码有什么问题? 使用Visual Studio 2013,“searchBox”不会返回值,但使用VS 2008时效果良好

代码隐藏

Partial Class _Default
Inherits Page

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
           Response.Write(Request.Form("searchBox"))
End Sub
末级

HTML页面

<%@ Page validateRequest="false" Title="Home Page" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %> 
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">

<asp:TextBox ID="SearchBox" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Search" />
</asp:Content>

它也不能与VS2008一起使用。由于它是一个服务器控件,控件的实际客户端id将不是
searchbox
,而是该控件的所有父id的串联。类似于
ctl00\u somePanel\u someContainer\u SearchBox

Request.Form
将包含原始html表单控件的值,包括客户端版本的
搜索框生成的值及其实际生成的id

要解决您的问题,您可以:

  • 阅读
    SearchBox.Text
    属性,而不是阅读
    表单
    对象(可能是最好的选择)
  • 将服务器控件替换为纯客户端控件(
  • 使用
    CliendIDMode
    修复控件ID,但我认为这是一个糟糕的选择

最简单的方法是在您想要使用请求时使用。表单(“搜索框”)的设置如下:

<asp:TextBox ID="SearchBox" clientmode="Static" runat="server"></asp:TextBox>

这将强制使用您设置的名称“SearchBox”来创建对象,而不是“ctl00\u somePanel\u someContainer\u SearchBox”这个名称只有它知道如何解释


这不是访问对象的最佳方式,但这会让您按照您现在的方式进行操作。

很高兴它解决了您的问题。这正是ASP.Net和服务器控制的原理。这模仿了windows应用程序开发,允许开发人员读/写控件属性。ASP.Net引擎(特别是viewstate管理)将处理重建控件的所有魔法。