2013-04-23 51 views
0

我原以为这个问题有一个明显的答案,但我似乎无法找到任何答案。 我有一个ASP.Net MasterPage有一个内容页面,其中有几个动态创建的输入控件。 当我发布包含它们的表单时,我想要检索它们的值。这只能使用控件的name属性并调用Request.Form [name]。从内容页面中的动态创建的输入控件检索表单数据

由于输入控件是ContentPlaceHolder的一部分,因此它们的name属性被分配了控件的UniqueId,它是一个字符串,例如:“ctl00 $ skts_body_div $ MyNameId”。

上例中的名称不是随机生成的名称,但它取决于父母控件的结构,因此在回发中生成名称“ctl00 $ skts_body_div $ MyNameId”并不那么容易,所以我可以调用Request.Form [“ctl00 $ skts_body_div $ MyNameId”]。

检索发布数据的最佳实践方式是什么?

该平台是.NET 4.0

感谢圣战

回答

0

我发现我可以设置name属性等于在浏览器中使用JavaScript的ID。 这可以很容易地用jQuery来完成,但是如果你不使用jquery,那么另一种选择是遍历输入元素和可能回发的其他元素。

我认为唯一的缺点是您必须确保您只更改动态创建的控件,而不是命中任何runat =“server”ASP控件,因为这些控件使用name属性为其赋值。

下面的代码是JavaScript使用:

function SetControlNamesToId() { 
    var inputObjects = document.getElementsByTagName('input'); 
    for (i = 0; i < inputObjects.length; i++) { 
     if (inputObjects[i].type == 'checkbox' || 
      inputObjects[i].type == 'radio' || 
      inputObjects[i].type == 'text' || 
      inputObjects[i].type == 'hidden') { 
      SetNameToId(inputObjects[i]); 
     } 
    } 

    var selectObjects = document.getElementsByTagName('select'); 
    for (i = 0; i < selectObjects.length; i++) { 
     SetNameToId(selectObjects[i]); 
    } 

    var textAreaObjects = document.getElementsByTagName('textarea'); 
    for (i = 0; i < textAreaObjects.length; i++) { 
     SetNameToId(textAreaObjects[i]); 
    } 
} 

function SetNameToId(control) 
{ 
    if (control.id && control.id != "") { 
     control.setAttribute("name", control.id); 
    } 
} 
相关问题