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