日期:2014-05-18  浏览次数:20445 次

使用了master的aspx页面的form元素的id为何会发生改变?
我有一个使用了master的aspx页面,查看form元素,没有!我想master的form元素应是这个aspx页面的form元素。毕竟aspx页面中的内容是套在master中的。于是我将master的form元素的id改为masterform,启动页面,查看源文件,发现form元素的id变为aspnetForm,不是我设的masterform。不知何故?请高手解答,谢谢!!!

------解决方案--------------------
错误原因如下所示:

public override string UniqueID
{
get
{
if (this.NamingContainer == this.Page)
{
return base.UniqueID;
}
return "aspnetForm ";
}
}
容器名称与当前页名称不同时UniqueID属性返回 "aspnetForm ",这个属性呈现了Form标记在客户端显示的name特性(name= "aspnetForm ").
如果需要的话,你可以继承MasterPage类,然后重写这个属性.


------解决方案--------------------
没看明白,用了master page的aspx页面都事包含在content控件里的根本不需要form
唯一的form就事在master page里的那个.
------解决方案--------------------
如 windbey(北风) 所说,HtmlForm.UniqueID 得以重写,以保证:

使用 UniqueID 属性获取分配给 HtmlForm 控件的唯一编程标识符。此属性重写基实现,以在该控件包含在除页外的实现 INamingContainer 的对象(如自定义服务器控件)中时返回常数值。如果命名容器为页,则返回 HtmlForm 控件的 ID 属性的值。

UniqueID 属性和 Name 属性总是返回相同的值。如果 HtmlForm 控件呈现在要求 HtmlForm 控件的 UniqueID 和 Name 属性相同的浏览器上,这将十分有用。为使这两个属性保持同步,Name 属性总是返回 UniqueID 属性的值。


document.forms( 'Masterform ').elements( 'funcParam ').value=pathandfile;

》》》》

document.forms( ' <% =Page.Form.UniqueID %> ').elements( 'funcParam ').value=pathandfile;