js 改变了服务器控件的值,在服务器端为什么取不到?

liuterry 2007-12-03 01:47:06
子页面a.aspx 嵌套在母版页master页面中,a.aspx页面中有个服务器端的控件, <asp:TextBox ID="TxtName" runat="server" ></TextBox>
在页面的js中改变了TxtName的值,"ctl00$ContentPlaceHolder1$TxtName"是察看源代码的TxtName的ID值,从页面的显示的结果来看,该值是更新过的,但是在a.aspx页面中一个button的click事件中string Uname=TxtName.Text,却得不到TxtName更新过以后的值.不知道为什么,希望各位能给帮忙下!
...全文
362 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
sssjjjpppsjp 2008-05-06
  • 打赏
  • 举报
回复
学习
liuterry 2007-12-04
  • 打赏
  • 举报
回复
恩,谢谢vickgu这位兄弟看的这么仔细,以及耐心的帮忙.也非常感谢楼上各位兄弟的帮忙,现在问题已经解决,现在就散点小分,虽然分数不多,但也代表小弟的一片心意.谢谢
LikeCode 2007-12-04
  • 打赏
  • 举报
回复
关于这个问题我也有些郁闷,前几天用用WEBSERVEICE做联动下拉菜单时就遇,只好用HIDDEN做个迂回。
试试用HIDDEN保存吧。
vickygu 2007-12-04
  • 打赏
  • 举报
回复
注意这句:
<asp:Button ID="Button1" runat="server" OnClientClick="test();return false;" Text="Button" />

如果 你在点击Button1的时候还要在后台做其它操作,可以这么写:

<asp:Button ID="Button1" runat="server" OnClientClick="test();" Text="Button" onclick="Button1_Click" />
protected void Button1_Click(object sender, EventArgs e)
{
string a = this.txtTest.Text;
}
vickygu 2007-12-04
  • 打赏
  • 举报
回复
1、首先,你的问题提出时 <asp:TextBox ID="TxtName" runat="server" > </TextBox> 标签就不对称。
</TextBox> 应该改成</asp:TextBox>。
2、我试过你的问题,不管有没有继承母版页,均可以得到被更新后的值。
我的代码如下(先点击Button1,用js改变textBox的值,再点击Button2获得改变后的值):
前台:
<%@ Page Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="testWeb.WebForm1" %>
<asp:Content ID="Content1" runat="server" contentplaceholderid="ContentPlaceHolder1">
<script language="javascript" type="text/javascript">
function test()
{
//document.getElementById("ctl00_ContentPlaceHolder1_txtTest").value="hahha";
//建议采用下面的方法
document.getElementById('<%=txtTest.ClientID%>').value="hahha";
}
</script>
<asp:Label ID="Label1" runat="server"/>

<asp:TextBox runat="server" Text="test" ID="txtTest" ></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClientClick="test();return false;" Text="Button" />
   
<asp:Button ID="Button2" runat="server" Text="getValue"
onclick="Button2_Click" />
<br />
</asp:Content>
后台:
protected void Button2_Click(object sender, EventArgs e)
{
this.Label1.Text = this.txtTest.Text;
}
LineAge_Hell 2007-12-04
  • 打赏
  • 举报
回复
没传给服务器
a116199833 2007-12-04
  • 打赏
  • 举报
回复
很简单的问题,因为你改变值之后,点BUTTON 页面又刷新了一次,,,刷新的时候textbox的值被改变了
zyug 2007-12-04
  • 打赏
  • 举报
回复
ctl00$ContentPlaceHolder1$TxtName -> UniqueID HTML的Name
ctl00_ContentPlaceHolder1_TxtName -> ClientID HTML的ID

js用要ClientID
Request.Form[控件ID.UniqueID]
redlotoc 2007-12-04
  • 打赏
  • 举报
回复
ID="TxtName"这个值为什么要改呢?为什么不用clientid?。改也是要改text(value)的值呀.
liuterry 2007-12-04
  • 打赏
  • 举报
回复
感觉很奇怪.不知道为什么...郁闷.
shen5924624 2007-12-03
  • 打赏
  • 举报
回复
用Request.Form[ID] 试试!
liuterry 2007-12-03
  • 打赏
  • 举报
回复
楼上的兄弟,能说的详细点吗?
PCI_E 2007-12-03
  • 打赏
  • 举报
回复
在masterPage里的话控件藏的比较深,要用递归才能找到控件
PCI_E 2007-12-03
  • 打赏
  • 举报
回复
JS不能改变服务器控件的值
liuterry 2007-12-03
  • 打赏
  • 举报
回复
zoulang663这位兄弟的做法我试过了,不过结果还是有错,报Uname=Request.Form["TxtName"]这句:"未将对象的引用设置对象的实例",可能这和母版页有什么关系吗?
liuterry 2007-12-03
  • 打赏
  • 举报
回复
我在page_load()里面没有使用过该控件!
zoulang663 2007-12-03
  • 打赏
  • 举报
回复
或许你可以试一下这个代替方案:
  1将a.aspx里面的 <asp:TextBox ID="TxtName" runat="server" > </TextBox> 改成相应的html <input type="text"....>
2取值时用string Uname=Request.Form["TxtName"]
SeerMi 2007-12-03
  • 打赏
  • 举报
回复
在客户端用代码 document.getElementById("TxtName").value = 'xxx';赋值,在服务器端接受是没有问题的,除非你在page_load里面又改变了控件的值
liuterry 2007-12-03
  • 打赏
  • 举报
回复
如果用了ClientID 会报错的,说是clientid 不是TextBox的有效属性...能稍微讲的详细点吗?
bingdian37 2007-12-03
  • 打赏
  • 举报
回复
控件的属性是存储于viewstate中的,直接改无效吧
加载更多回复(1)

62,046

社区成员

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

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

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

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