我想让用户给服务器端的文件更名,具体做法是:
在一个使用了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,因此没有获取到隐藏字段对象。不知有哪位高手能解决?为此问题郁闷了好几天!!!!!
问题解决,立即结帖!!!
在一个使用了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,因此没有获取到隐藏字段对象。不知有哪位高手能解决?为此问题郁闷了好几天!!!!!
问题解决,立即结帖!!!
逻辑上设计的有问题master 当然无法访问 aspx 的东东将此隐藏域放在 .master 问题, 岂不全解决了,这里我已回复
http://community.csdn.net/Expert/TopicView3.asp?id=56544932.
确实要按楼主这样设计那么 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;
========
js 的 script 块并非一定要放在 head 区域
可我还想问一个问题,不管何人、何时请求该页面,HiddenField的id均是ctl00_ContentPlaceHolder1_ReNameParam?不会是其它的吗?部署到不同的服务器上呢?=============是的,每个请求均是 ctl00_ContentPlaceHolder1_ReNameParam但是,这样不利于开发维护,比如,你更改了 ReNameParam 的 ID 为 ReNameParam911 那么你还是得同步更新你的 js 代码用我动态方法也是可以的事实上,将放在 js 放在 aspx 中任何地方都可以
var objID = "<%=ReNameParam.ClientID%>"
</script>SchoolMaster.js文件代码:
function ReFilename()
{
var fn =prompt("请输入新文件名","");
var obj=document.getElementById(objID );
obj.value=fn;
__doPostBack('MyLinkButton','');
}
使用ClientID是最简单的方法
关于这三个属性的区别、应用等相关讨论,可以参考此篇文章:关于 asp.net 服务器控件几个 ID 的说明
http://www.cnblogs.com/Jinglecat/archive/2007/04/28/730511.htmlHope helpful.
我原以为javascript只能放在<head></head>中,所以套用了master的aspx页面的javascript只能放在master的head区,导致编程困难重重,今天经各位大侠指点,真有拔开云雾见青天的感觉!谢谢!!!!!!!!!!!!