0

我想知道你们是否可以帮助我理解隐藏字段,因为我认为我没有让它们起作用。

在 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

4 回答 4

1

您需要引用隐藏字段的客户端 ID,这可能不是hidVal,因为在 HTML 中生成的实际客户端 ID 将基于父控件的命名容器。有两种方法可以解决此问题。首先,您可以使控件上的客户端 ID 为静态(这基本上告诉 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调用事件处理程序。然后,您将能够处理任何服务器端逻辑,并检查隐藏字段的值。希望这可以帮助!

于 2012-11-29T16:37:00.557 回答
1

在aspx<% save(); %>页面中放入 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);
    }
}
于 2012-11-29T16:39:12.603 回答
0

您要做的是通过客户端调用执行服务器端功能(保存)。这不起作用,因为它在页面首次加载时调用 save() 然后将返回值(可能什么都没有)放入您放置的代码中

<% save(); %>

相反,您需要您的按钮来触发保存功能,但首先触发您的 javascript。为此,您可以创建一个 asp:button (呈现为 ),然后添加“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);
    }
}

创建服务器端函数的最简单方法是双击设计视图中的按钮,因为它会为您添加正确的方法调用。

希望这可以帮助。

于 2012-11-29T16:40:21.950 回答
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";
    }
于 2012-12-01T10:07:37.050 回答