将HTML文本输入(没有runat服务器)的值从用户控件传递到后面的代码

时间:2015-04-11 08:08:31

标签: c# asp.net user-controls

我疯狂地尝试将HTML文本输入(没有runat =“server”)的值从用户控件发送到后面的代码。我得到一个没有错误的空字符串。步骤如下:

  1. 用户点击ID =“name_btn”的ImageButton。

  2. 必须将值传递给后面的代码。我正在测试是否通过使用页面加载(if(IsPostBack))和按钮单击功能来传递值,但两者中仍然没有值。

  3. 请注意,由于某些其他原因,我不希望文本输入在服务器上运行,因此我不想添加runat =“server”。有什么帮助吗?

    用户控制页面(name.ascx)

    <input type="text" ID="name" />
    <asp:ImageButton runat="server" ID="name_btn" OnClick="name_Click" ImageUrl="~/icon-ok.png" />
    

    用户控制 - 代码隐藏(name.ascx.cs)

    public string nameBox;
    protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                nameBox = Request.Form["name"];
                Response.Write("Name: " + nameBox);
            }
        }
    
    protected void name_Click(object sender, EventArgs e)
        {
               nameBox = Request.Form["name"];
               Response.Write("Name: " + nameBox);
        }
    

    母版页

    <uc:name runat="server" ID="UCname" />  
    

3 个答案:

答案 0 :(得分:3)

我认为与你想要做的事情有一点冲突。例如,在服务器上,您使用Request.Form [“”]来获取html输入元素,但是您通过id属性请求它。 Request.Form支持按索引和名称查找元素。

那你试过在html输入元素中添加一个name =“”吗?

答案 1 :(得分:1)

您可以通过两种方式使用javascript将值传递给codebehind。 1.单击图像按钮调用javascript。 在__EVENTARGUMENT中设置文本框值并调用__doPostback()。在页面加载中,您可以检查__EVENTARGUMENT中的值。

  1. 您可以使用PageMethods直接在服务器中调用函数。这里你的函数必须是WebMethod。

答案 2 :(得分:1)

您应该为输入标记添加名称属性,例如:

<input type="text" id="name" name="name"/>

然后你可以使用:

 if (IsPostBack)
 {
   nameBox = Request.Form["name"];
   Response.Write("Name: " + nameBox);
 }

Request.Form(element)[(index)|.Count]参数:

<强>元素

要从中检索值的表单元素的名称

索引

一个可选参数,使您可以访问参数的多个值之一。它可以是1到Request.Form(parameter).Count。

范围内的任何整数