我会相信这个问题有一个显而易见的答案,但我似乎找不到任何答案。我有一个ASP.Net MasterPage,它有一个内容页面,其中有几个动态创建的输入控件。当我发布包含它们的表单时,我想检索它们的值。这只能通过使用控件的name属性并调用Request.Formname来实现。
因为输入控件是ContentPlaceHolder的一部分,所以它们的UniqueId属性被分配了控件的名称,它是一个字符串,例如:"ctl00$skts_body_div$MyNameId“。
示例中的上述名称不是随机生成的名称,但它依赖于控件父级的结构,因此在回发中生成名称"ctl00$skts_body_div$MyNameId“并不容易,因此我可以调用Request.Form"ctl00$skts_body_div$MyNameId”。
检索发布数据的最佳实践方法是什么?
平台为.Net 4.0
感谢圣战
发布于 2013-04-29 16:38:51
我发现可以在浏览器中使用javascript将name属性设置为等于id。使用jquery可以很容易地做到这一点,但如果不使用jquery,那么另一个选择是遍历输入元素和其他可能回发的元素。
我认为唯一的缺点是您必须确保只更改动态创建的控件,而不是命中任何runat=“服务器”控件,因为这些控件使用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);
}
}https://stackoverflow.com/questions/16176745
复制相似问题