【问题标题】:ASP.NET How to read HTML Form Element?ASP.NET 如何读取 HTML 表单元素?
【发布时间】:2023-03-14 03:29:01
【问题描述】:

我有一个 ASP.NET Web 表单,其中有一个隐藏字段,如下所示:

<form id="form1" runat="server" action="http://localhost/fa/Default.aspx">
        <div>
    <input id="requestData" type="hidden" name="requestData" value="" runat="server" />
    <asp:Button ID="btnPOST" Text="POST" runat="server" OnClick="do_POST" />
        </div>
    </form>

在方法 do_POST 我有这个:

    protected void do_POST(object sender, EventArgs e)
        {
//requestDataField is of the type protected global::System.Web.UI.HtmlControls.HtmlInputHidden requestData;

            requestDataField.Text = "FOO!";
        }

当我提交表单(通过按下按钮)时,它会转到服务器(处理程序),只要我有这个:

string requestData = context.Request.Form["requestData"];

我得到一个空字符串..

但是如果我分配一个这样的值:

<input id="requestData" type="hidden" name="requestData" value="FOO" runat="server" />

我得到了“FOO”

我错过了什么?

【问题讨论】:

  • "requestDataField.Text = "FOO!";"它应该是 "requestDataField.Value = "FOO!"; " 但是我只想动态填充一些 html 元素或控件并在服务器端读取。

标签: c# asp.net html


【解决方案1】:

之所以没有这样做是因为该方法是在页面回发后调用的。意思是,如果您将 .Text 更改为 .Value 不幸的是,那时您已经阅读了您的表单,它实际上是一个空值。我记得在一个项目中你可以告诉你的表单在一个函数运行之前不要提交(但它是一个需要在 aspx 提交之前运行完整的 javascript)。在进行回发之前,您应该尝试查看是否有办法强制您的表单运行您的函数。

【讨论】:

    【解决方案2】:

    您的 do_POST 方法在服务器上运行,而不是在客户端上运行,因此设置代表&lt;input&gt; 控件的服务器端对象的值。您的context.Request.Form["requestData"] 从 POST 请求中提交的客户端数据中获取字段的值,该字段从未设置,因此为空白。

    如果您希望onClick 成为客户端函数,那么您需要做一些不同的事情。使用OnClientClick 属性(而不是onClick)。然后创建一个javascript方法来设置字段值:

    <asp:Button ID="btnPOST" Text="POST" runat="server" OnClientClick="do_POST" /> 
    
    <script>
      function do_POST() {
        document.getElementById("requestData").value = "FOO!";
      }
    </script>
    

    【讨论】:

    • 没有JS怎么办?
    • 将值放入隐藏输入字段的唯一方法是使用 javascript,或者在创建页面时将其放置在服务器端。
    • 如果我在另一个字段(除了隐藏输入)中传递它怎么办?我可以使用另一个在表单中传递数据吗?
    • 当然,您可以对数据使用隐藏或非隐藏输入。你想完成什么?
    • 我想要的是在具有该表单的元素中传递一些文本。当我按下按钮(btnPOST)时会生成该文本。我只想在服务器端阅读它。现在我正在使用: on_POST 按钮功能执行此操作: data.Value = "FOO!";在服务器处理程序(表单操作)中,我这样做: string requestData = request.Form["data"];我仍然得到一个空字符串。我错过了什么?
    【解决方案3】:

    我尝试了您的代码并对其进行了一些更改。

    1. requestDataField.Text = "FOO!";更改为requestData.Value = "FOO";

    2. 我还添加了两个按钮。一个用于 do_POST 函数,并且 UseSubmitBehaviour 属性设置为 False。另一个是提交表单。

    如果您想在客户端设置它,那么您将不得不使用 Javascript。

    【讨论】:

      【解决方案4】:

      对 HtmlInputHidden 控件使用“Value”而不是“Text”属性:

      requestDataField.Value = "FOO!";

      而不是

      requestDataField.Text = "FOO!";

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-18
        • 2016-09-27
        • 1970-01-01
        相关资源
        最近更新 更多