从内容页面中动态创建的输入控件中检索表单数据

时间:2013-04-23 18:37:51

标签: asp.net html master-pages clientid naming-containers

我会相信这个问题有一个明显的答案,但我似乎找不到任何答案。 我有一个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

谢谢圣战

1 个答案:

答案 0 :(得分:0)

我发现我可以在浏览器中使用javascript将name属性设置为等于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);
    }
}