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

在使用了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%> ")