我在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>
控件。
答案 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
}