利用隐藏输入框实现客户端和服务端互传参数的问题

ameng_2002 2003-06-10 07:29:21
思路:
页面载入时,先给隐藏输入框赋值;点击按钮时,先运行客户端的Sign()函数,调用客户端控件(数字签名控件)对隐藏输入框的值加密,并将加密后的值赋给该隐藏输入框;再运行服务端的Button1_click事件,提取加密后的值;

<script language="javascript">
function Sign()
{
var str;
str=Sign.GetEnS(document.form1.tb1Msg.value);//调用客户端控件,
document.form1.tb1Msg.value=str;
}
</script>

<form id="form1" runat="server">
<input type="hidden" id="tb1Msg" name="tb1Msg" runat="server">
...
<asp:Button id="Button1" runat="server">
</form>

.cs文件中
Page_Load()函数中
Button1.Attributes.Add("onClick","Sign()");
tb1Msg.Value=。。。。//给隐藏输入框赋值

Button1_Click()事件中
Response.Write(Request.Form["tb1Msg"]);

出现的问题:
在服务器上可以输出加密后的字符;但是在别的电脑上却不能返回加密后的字符?如果用tb1Msg.Value,服务器和别的电脑返回的都是没有加密的值;
...全文
51 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
ameng_2002 2003-06-11
  • 打赏
  • 举报
回复
搞定了,果然是控件注册的问题!
谢谢楼上几位兄弟
ameng_2002 2003-06-11
  • 打赏
  • 举报
回复
谢谢

不过我给控件初始化过程中得出要加密的字符串,所以跟你说的
PageLoad()
{
动态创建控件;
if(!IsPostBack)
{
隐藏控件付值;
}
}
差别不是很大吧?


protected override void CreateChildControls()
{
TextBox tb1Msg = new TextBox();
tb1Msg.ID = "tb1Msg";
this.Controls[1].Controls.Add(tb1Msg);
}

这样就不需要。。象在Page_load()中那样要重新创建了。。。

不知道每次载入的时候是不是也要运行CreateChildControls()?
gangganghao 2003-06-10
  • 打赏
  • 举报
回复
而且你一样可以。。。。
PageLoad()
{
动态创建控件;
if(!IsPostBack)
{
隐藏控件付值;
}
}
gangganghao 2003-06-10
  • 打赏
  • 举报
回复
哦。。如果是这样的话你可以这样添加你的动态控件。。。

protected override void CreateChildControls()
{
TextBox tb1Msg = new TextBox();
tb1Msg.ID = "tb1Msg";
this.Controls[1].Controls.Add(tb1Msg);
}

这样就不需要。。象在Page_load()中那样要重新创建了。。。
ameng_2002 2003-06-10
  • 打赏
  • 举报
回复
先闪了,明天再来结贴
ameng_2002 2003-06-10
  • 打赏
  • 举报
回复
明天把控件注销,重新注册,看看是不是注册的问题。

有一个奇怪的问题。。。

是什么样的需要,没有放到。。!IsPostBack里面。。。。

原因就是页面上的有些控件事动态生成的,在对控件初始化的同时,给隐藏输入框赋值,所以。。。。


gangganghao 2003-06-10
  • 打赏
  • 举报
回复
你可以不让它隐藏。。调用一下。。Sign()。。看一看是否加密了。。。。。

有一个奇怪的问题。。。

是什么样的需要,没有放到。。!IsPostBack里面。。。。

ameng_2002 2003-06-10
  • 打赏
  • 举报
回复
我用的是
<OBJECT id="Sign" codeBase="....." classid="clsid:7EF5ECC3-F559-4F04-8C1E-897C20038FA5">
如果没有注册该组件,系统会提示注册的。或许没有注册好?
SilentClock 2003-06-10
  • 打赏
  • 举报
回复
我大概知道了
Sign.GetEnS(document.form1.tb1Msg.value);
在你的机器上能加密,而别人机器上因无此组件,所以不能加密。
SilentClock 2003-06-10
  • 打赏
  • 举报
回复
我大概知道了
Sign.GetEnS(document.form1.tb1Msg.value);
在你的机器上能加密,而别人机器上因无此组件,所以不能加密。
SilentClock 2003-06-10
  • 打赏
  • 举报
回复
不好意思,老兄,没说到重点。
其实document.all和document.Form1.都一样。
我的意思是在我这里是能得到加密后的 xxx 的!
gangganghao 2003-06-10
  • 打赏
  • 举报
回复
而Request.Form["tb1Msg"]。。获得的是提交时的值。。与

tb1Msg.value。。会有不同。。如果不是你的程序问题。。这也应该是正确的。。
ameng_2002 2003-06-10
  • 打赏
  • 举报
回复
谢谢楼上:)

为什么在服务器上面运行却可以,但是在另外一台电脑上却不能?
SilentClock 2003-06-10
  • 打赏
  • 举报
回复
老兄我帮你测试过了,
当用 Request.Form["tb1Msg"] 是没有!IsPostBack问题的。
我用的是
Sign()
{
...
document.all("tblMsg").value = "xxx";//没有客户端加密
}
一切正常
ameng_2002 2003-06-10
  • 打赏
  • 举报
回复
还是这样?

客户端的Sign()-->Page_Load()-〉服务端的Button1_Click事件
gangganghao 2003-06-10
  • 打赏
  • 举报
回复
单击后执行的顺序是这样的。。

客户端Sign()(隐藏控件付加密后的值)。。Page_Load()。(这个时候又重新付了初值)。。然后才是Button_Click()事件。。。。
ameng_2002 2003-06-10
  • 打赏
  • 举报
回复
而且出现的问题是
在服务器上运行可以返回加密后的值,但是在另外一台返回的确实没有加密的值?
现在我有点怀疑是另外那台电脑的控件没有注册好!
ameng_2002 2003-06-10
  • 打赏
  • 举报
回复
因为程序的需要,没有放到。。!IsPostBack里面
单击Button1,事件执行的顺序是不是这样?
Page_Load()-〉客户端的Sign()-->服务端的Button1_Click事件
如果是这样,那应该是否放在!IsPostBack里面都无所谓啊/
bbildb 2003-06-10
  • 打赏
  • 举报
回复
同意 gangganghao(ganggang)
gangganghao 2003-06-10
  • 打赏
  • 举报
回复
你付初值是在。。!IsPostBack。。中吗?
加载更多回复(1)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧