了解隐藏的字段

时间:2012-11-29 16:31:20

标签: c# javascript asp.net

我想知道你们是否可以帮我理解隐藏的领域,因为我认为我不让他们去工作。

在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);
}

点击按钮后,我查看文件,没有变化 我的方法是正确的还是我不明白这是如何工作的?

4 个答案:

答案 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";
    }