在使用了master的aspx页面上放置一个HiddenField控件,在js中如何访问它呢?
我想让用户给服务器端的文件更名,具体做法是:
在一个使用了master的aspx页面上放置一个HyperLink控件与一个HiddenField控件,用户点击HyperLink控件,先执行一段客户端js,弹出一个对话框提示用户输入新文件名,确定后回送到服务器端更名。具体代码如下(无关的代码被我删了):
master代码:
<head runat= "server ">
<script type= "text/javascript " src= "/SchoolMaster.js "> </script>
</head>
<body >
<form id= "Masterform " runat= "server " method= "post " enctype= "multipart/form-data ">
<asp:contentplaceholder id= "ContentPlaceHolder1 " runat= "server ">
</asp:contentplaceholder>
</form>
</body>
aspx代码:
<asp:Content ID= "Content1 " ContentPlaceHolderID= "ContentPlaceHolder1 " Runat= "Server ">
<asp:HyperLink ID= "HyperLink1 " runat= "server " NavigateUrl= "javascript:ReFilename() "> HyperLink </asp:HyperLink>
<asp:HiddenField ID= "ReNameParam " runat= "server " value= " "/>
</asp:Content>
SchoolMaster.js文件代码:
function ReFilename()
{
var fn =prompt( "请输入新文件名 ", " ");
var obj=document.getElementById( "ReNameParam ");
obj.value=fn;
__doPostBack( 'MyLinkButton ', ' ');
}
现在运行,点击HyperLink1,弹出对话框,提示输入新文件名。输完后,提示脚本出错,对于obj.value=fn这句提示obj不能是null,因此没有获取到隐藏字段对象。不知有哪位高手能解决?
为此问题郁闷了好几天!!!!!
问题解决,立即结帖!!!
------解决方案--------------------想不通 为什么把JS放到 MasterPage页面里 为什么不放在Aspx页面中呢 试试吧
------解决方案--------------------1.
逻辑上设计的有问题
master 当然无法访问 aspx 的东东
将此隐藏域放在 .master 问题, 岂不全解决了,
这里我已回复
http://community.csdn.net/Expert/TopicView3.asp?id=5654493
2.
确实要按楼主这样设计那么
a. 简单方法:硬编码
运行一次目标 aspx 页面,查看其 html 源码, 找到目标隐藏域,你可以搜索 ReNameParam,次隐藏域,客户端呈现的应该类似
<input type=hidden id=xxx_Content1_xxx_ReNameParam ....
拷贝此客户端的真实 id 更新你的脚本代码
b. 动态方法
// .master.cs 实现一属性
public string MyHiddenFieldClientIDFromAPX {
get { return (ViewState[ "MyHiddenFieldClientIDFromAPX "] == null) ? " " : (string)ViewState[ "MyHiddenFieldClientIDFromAPX "];
set { ViewState[ "MyHiddenFieldClientIDFromAPX "] = value; }
}
// .master
var obj=document.getElementById( ' <% =ViewState[ "MyHiddenFieldClientIDFromAPX "] %> ');
// .aspx.cs
((MyMasterClass)Page.Master).MyHiddenFieldClientIDFromAPX = ReNameParam.ClientID;
------解决方案--------------------var obj = document.getElementById( " <%=ReNameParam.ClientID%> ")