在codebehind访问<input type =“text”/>值

时间:2013-01-13 13:25:14

标签: sharepoint-2010 httprequest applicationpage

我在SharePoint应用程序页面上有一个小表单:

 <form method="post" id="registration-form" action="default.aspx" class="form-general cf" data-querycompletion-url="ajax/searchinstant.aspx">
     <input type="text" id="name" name="name" placeholder = "Your name" runat="server" />
          <input type="text" id= "company" name="company" placeholder= "Your company" runat="server"/>
    <input type="text" id="srchtxtx" class="search" name="visitor" placeholder="visitor" runat="server" />
    <input name="btnConfirm" id="Submit1" class="right" value="register" type="submit" runat="server" /></form>

在default.aspx的codebehinde,我想访问值:

string val1 = name.value;
string val2 = company.value;
string val3 = srchtxtx.value;

但是上面的命令分别在val1,val2和val3中返回空字符串。但是,如果我从runat = "server"标记中删除<input>,那么我可以成功访问值:

string val1 = Request.Form["name"];
string val2 = Request.Form["company"];
string val3 = Request.Form["visitor"];

问题是当我在runat = "server"标签中使用<input>时它返回空字符串值的原因? 由于某些原因,我无法从runat = "server"代码中删除<input>

在假设<input>中的runat =“server”属性时,是否有其他方法可以在代码隐藏时访问<input>值?

我也被限制不使用<asp:TextBox>控件。

1 个答案:

答案 0 :(得分:1)

正如我在html form submitted with null values暗示的那样,这是因为表单不是runat="server"所以asp.net不处理回发数据,即没有填充srchtxtx等的属性。

但是html元素在页面上仍然是唯一的ID,所以你不能只做Request.Form["srchtxtx"];

要解决此问题,您可以使用input元素的UniqueID来获取回发值:

<强> HTML

<form method="post" id="registration-form" action="default.aspx" class="form-general cf" data-querycompletion-url="ajax/searchinstant.aspx">
    <input type="text" id="srchtxtx" name="srchtxtx" runat="server" />
    <input name="btnConfirm" id="Submit1" class="right" value="register" type="submit" runat="server" />
</form>

<强> C#

protected void Page_Load(object sender, EventArgs e)
{
    string val1 = srchtxtx.Value; // always ""
    string val2 = Request.Form["srchtxtx"]; // always null
    string val3 = Request.Form[srchtxtx.UniqueID]; // input value
}