我想知道你们是否可以帮我理解隐藏的领域,因为我认为我不让他们去工作。
在aspx页面上我有:
<asp:HiddenField ID="hidVal" value="" runat="server" />
点击按钮我有一个名为
的JavaScript函数<button type="button" id="search" onclientclick="search_click()">Search</button>
功能
function search_click() {
document.getElementById('hidVal').Value = "1";
<% save(); %>
}
在aspx.cs中我有一个执行此操作的函数:
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\fgreene\Desktop\savedAdresses.txt", true))
{
file.WriteLine(hidVal.Value);
}
点击按钮后,我查看文件,没有变化 我的方法是正确的还是我不明白这是如何工作的?
答案 0 :(得分:1)
您需要引用隐藏字段的客户端ID,该ID可能不是hidVal
,因为HTML中生成的实际客户端ID将基于父控件的命名容器。有两种方法可以解决这个问题。首先,您可以在控件上创建客户端ID static (这基本上告诉ASP.NET 使ID完全符合我的说法。):
<asp:HiddenField ID="hidVal" value="" ClientIDMode="Static" runat="server" />
其次,您可以在生成JavaScript时从服务器中查找ClientID属性:
document.getElementById('<%= hidVal.ClientID %>').Value = "1";
这将直接在JavaScript代码中呈现实际的客户端ID。这两种方法都可能没问题,但第二种方法只有在JavaScript直接嵌入ASPX文件而不是静态.JS文件中时才有效。
调用服务器端方法:
问题的第二部分是关于按下按钮时调用服务器端代码。您应该通过将OnClick
处理程序附加到按钮来执行此操作:
<button runat="server" id="BtnSearch" onclientclick="search_click()" OnClick="btnSearch_Click">Search</button>
按下按钮时,页面将被回发并调用btnSearch_Click
事件处理程序。然后,您将能够处理任何服务器端逻辑,以及检查隐藏字段的值。希望这有帮助!
答案 1 :(得分:1)
将<% save(); %>
放在aspx页面的JavaScript函数中会导致save
在服务器上构建页面时运行,而不是在调用周围的JavaScript函数时在客户端上。此时,隐藏字段为空,因此您的文件会写入一个空行。当用户单击该按钮时,隐藏字段将被填充,但没有任何信息可以告诉服务器这是否已发生。
您需要做的事情是:
// In your aspx, for the javascript function: remove the call to save,
// use the correct ID for the hidden field
function search_click() {
document.getElementById('<%= hidVal.ClientID %>').Value = "1";
}
// In your aspx in place of the button put
<asp:Button id="search" runat="server"
onclientclick="search_click(); return true;" onclick="search_click">
Search
</asp:Button>
// This results in a button that calls the javascript function on click, and
// then posts back to the server saying that the button has been clicked
// In your C#, this function gets called when the client posts back to
// say that the button has been clicked.
public protected void search_click(object sender, EventArgs e)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(
@"C:\Users\fgreene\Desktop\savedAdresses.txt", true))
{
file.WriteLine(hidVal.Value);
}
}
答案 2 :(得分:0)
您要做的是通过客户端呼叫执行服务器端功能(保存)。这不起作用,因为它在页面首次加载时调用save(),然后将返回值(可能没有任何内容)放入您放置的代码中
<% save(); %>
相反,你需要你的按钮来激活保存功能,但首先激活你的javascript。你可以通过创建一个asp:按钮(呈现为)然后添加“OnClientClick”(对于你的javascript)和“OnClick”(对于你的服务器端功能)来做到这一点。
<asp:Button id="btnSearch" runat="server" OnClick="btnSearch_Click" OnClientClick="search_click()" text="Search" />
然后在您的C#代码中,您需要将该方法命名为与OnClick值相同的方法:
protected void btnSearch_Click(object sender, EventArgs e)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\fgreene\Desktop\savedAdresses.txt", true))
{
file.WriteLine(hidVal.Value);
}
}
创建服务器端功能的最简单方法是双击设计视图中的按钮,因为它会为您添加正确的方法调用。
希望这有帮助。
答案 3 :(得分:0)
您可以在服务器端和客户端事件中更改隐藏字段值。
更改客户端的值
<script type="text/javascript">
function setvalue() {
document.getElementById('hidVal').value = "1";
}
</script>
<div>
<asp:HiddenField ID="hidVal" value="" runat="server" />
<br />
<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="setvalue();" />
</div>
更改服务器端的值
<div>
<asp:HiddenField ID="hidVal" value="" runat="server" />
<br />
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</div>
protected void Button1_Click(object sender, EventArgs e)
{
hidVal.Value = "1";
}