0

我有一个 asp.net 表单。

但是表单内的控件在 1 个文本框和 2 个下拉列表中作为一行。

并且有一个“加号”和“减号”按钮供用户添加和删除行。

提交表单后,我将通过使用从这些控件中获取值Request.Form["ControlName"]

但我需要确认是否["ControlName"]存在。

我可以把那段代码放进try catch去确认这样

for(int a=1;a<10;a++)
{
  try 
  {
    Response.Write(Request.Form["ControlName"+a.ToString()]);
  }
  catch {}
}

通过这样做,理论上不存在的控件将被catch语句捕获。

但我正在尝试使用另一种方法进行检查,例如FindControl("ServerControlID")

但那是server controls唯一的。

我的前面代码将是这样的

<input type="text" id="txt1" name="txt1"/>

<input type="text" id="txt2" name="txt2"/>

<input type="text" id="txt4" name="txt3"/>

注意:我无法添加runat="server"。如果是这样,我可以使用FindControl()

4

2 回答 2

0

如果要访问服务器端的控件(代码隐藏),则该控件必须是服务器控件甚至是带有runat = "server"属性的html控件,通过引入您可以访问HTML控件。

<input type="text" id="txt1" name="txt1" runat = "server"/>
于 2012-09-11T07:24:11.070 回答
0

您可以使用NameValueCollection返回的Request.Form.AllKeys.
这会返回一个IEnumerable

使用Linq检查如下:

for(int a=1;a<10;a++)
{
  var paramName = "ControlName"+a.ToString();
  if(Request.Form.AllKeys.Contains(paramName ))
  {
    Response.Write(Request.Form[paramName ]);
  }
  else
  {
    //key not present
  }
}
于 2012-09-11T08:52:30.837 回答