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

感谢圣战

4

1 回答 1

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);
    }
}
于 2013-04-29T08:38:51.037 回答