在C#中获取由javascript创建的隐藏字段

时间:2015-10-08 10:17:42

标签: javascript c# asp.net

我有一个可以动态创建隐藏字段的javascript,隐藏字段的生成也可变,它也可以是200和1000。我希望使用循环在我的C#代码中使用这些值。我尝试了下面的代码,但它只给我第一个静态值,但我需要循环中的值,以便我可以访问所有值并存储在我的SQL数据库中

string valueOfTheHiddenField = this.Request.Form.Get("0");

需要此类代码的示例

for each
{
    string HiddenFieldvalue = this.Request.Form.Get("0");
    insert into sql = value Of The HiddenField
}

以下是我正在使用的示例代码

var form = document.forms['form1'];
for (var i = 0; i < 150; i++) {
    var el = document.createElement("input");
    el.type = "hidden";
    el.name = "myHiddenField";
    el.value = trial2;
    el.id = i;
    form.appendChild(el);
}

生成这些隐藏字段

<input id="0" type="hidden" name="myHiddenField" value=" Root Canal Treatment ">
<input id="1" type="hidden" name="myHiddenField" value=" Cosmetic Dentistry ">
<input id="2" type="hidden" name="myHiddenField" value=" Fillings ">
<input id="3" type="hidden" name="myHiddenField" value=" Apicectomy ">
<input id="4" type="hidden" name="myHiddenField" value=" Aesthetic Crown And Bridges ">
<input id="5" type="hidden" name="myHiddenField" value=" Bleaching "> 

2 个答案:

答案 0 :(得分:2)

与您的问题一样,您可以按名称访问隐藏字段(甚至是表单字段)值,如下所示:

string hdnCommaSeparatedString = Request.Form["myHiddenField"];

这将为您提供所有隐藏字段的逗号分隔值字符串,您可以使用string.split(...)重载来分割这些值以获取值。

string[] hiddenValues = hdnCommaSeparatedString.Split(',');

E.g。 "Root Canal Treatment ,Cosmetic Dentistry ...." //This you can split using server side logic

注意如果隐藏字段中的值包含逗号,并且当您尝试使用逗号(,)代码后面的string.split时,您将看到意外的字符串中断。

E.g。

 <input id="0" type="hidden" name="myHiddenField" value=" Root Canal, Treatment "><!--Notice a comma after Root Canal in the value & this will yield unexpected values if you string split on code behind.-->
 <input id="1" type="hidden" name="myHiddenField" value=" Cosmetic Dentistry ">

修改

根据以下评论,通过Request.Form

获取表单字段值的其他情况

<强> 情况1:

隐藏字段名称在您的情况下不是唯一的:

string[] hiddenFieldValueList = Request.Form.GetValues("myHiddenField");
//This allows parsing of hidden/form field values having comma in them 

<强> 情况2:

隐藏字段名称是唯一的,您可以提取如下值:

<强> HTML

<input id="0" type="hidden" name="myHiddenField0" value=" Root Canal, Treatment ">
<input id="1" type="hidden" name="myHiddenField1" value=" Cosmetic Dentistry ">
<input id="2" type="hidden" name="myHiddenField2" value=" Fillings, ">
<input id="3" type="hidden" name="myHiddenField3" value=" Apicectomy ">
<input id="4" type="hidden" name="myHiddenField4" value=" Aesthetic Crown And Bridges ">
<input id="5" type="hidden" name="myHiddenField5" value=" Bleaching "> 

代码背后

var hiddenFieldValueList = Request.Form.AllKeys.Where(key => key.StartsWith("myHidden")).Select(it => Request.Form[it]).ToList();

希望这能帮到你..

答案 1 :(得分:0)

为清楚起见,您应为每个隐藏字段创建一个唯一的名称,因为如果您不在代码中,请求将只会收到一个密钥,即myHiddenField&#39;,它将保留所有的价值观。 所以,html代码应该是这样的:

<input id="0" type="hidden" name="myHiddenField0" value=" Root Canal Treatment ">
<input id="1" type="hidden" name="myHiddenField1" value=" Cosmetic Dentistry ">
<input id="2" type="hidden" name="myHiddenField2" value=" Fillings ">
<input id="3" type="hidden" name="myHiddenField3" value=" Apicectomy ">
<input id="4" type="hidden" name="myHiddenField4" value=" Aesthetic Crown And Bridges ">
<input id="5" type="hidden" name="myHiddenField5" value=" Bleaching "> 

只需将索引附加到JS代码中每个名称的末尾。

然后在后面的C#代码中,您应该像这样处理发布的表单:

var keys = Request.Form.AllKeys;
foreach (var key in keys)
{
    string value = Request.Form.Get(key);
}

通过访问已发布表单的AllKeys属性,您将获得所有发布的不同键,这些键是相应输入字段的名称。所以Keys == Names。

您有密钥,因此可以使用Request.Form属性的Get方法获取值。它接受索引或输入字段的键(名称)。

然后,只要您获得了价值,就可以继续使用您的方案。

希望这有帮助。