Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET如何读取HTML表单元素?_C#_Asp.net_Html - Fatal编程技术网

C# ASP.NET如何读取HTML表单元素?

C# ASP.NET如何读取HTML表单元素?,c#,asp.net,html,C#,Asp.net,Html,我有一个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

我有一个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>
当我提交表单(按下按钮)时,它会转到服务器(处理程序),如果我有:

    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" />

我得到了“福”


我缺少什么?

您的do\u POST方法在服务器上运行,而不是在客户机上运行,设置表示
控件的服务器端对象的值也是如此。您的
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>

函数do_POST(){
document.getElementById(“requestData”).value=“FOO!”;
}

我尝试了您的代码,但没有做什么更改

  • 更改
    requestDataField.Text=“FOO!”
    to
    requestData.Value=“FOO”

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

  • 如果您想在客户端设置它,那么必须使用Javascript

    对HtmlInputHidden控件使用“值”而不是“文本”属性:

    requestDataField.Value=“FOO!”

    而不是

    requestDataField.Text=“FOO!”


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

    不使用JS怎么办?将值放入隐藏输入字段的唯一方法是使用javascript,或者在创建页面时将其放置在服务器端。如果我将其传递到另一个字段(隐藏输入除外),该怎么办?我可以使用另一个来传递表单中的数据吗?当然,您可以使用隐藏或非隐藏的数据输入。你想做什么?我想做的是在元素中以这种形式传递一些文本。当我按下按钮(btnPOST)时,会生成该文本。我只想在服务器端读一下。现在我正在使用:on_POST按钮函数执行以下操作:data.Value=“FOO!”;在服务器处理程序(表单操作)中,我执行以下操作:stringrequestdata=request.form[“data”];我仍然得到一个空字符串。我遗漏了什么?“requestDataField.Text=“FOO!“;”应该是“requestDataField.Value=”FOO!“;”然而,我只想动态填充一些html元素或控件,并在服务器端读取。