RadioButtonList旁边的文本框

时间:2012-03-14 18:03:18

标签: asp.net

我需要创建一个包含“其他”选项的radiobuttonlist,我必须在它旁边放一个文本框。这就是我做的。

if(!ispostpage){
PlaceofWork.DataSource = workplace;
PlaceofWork.DataBind();
PlaceofWork.DataTextField = "WorkPlace1";
PlaceofWork.DataValueField = "WorkID";
PlaceofWork.Items.Add(new ListItem("Other - Specify<input name=\"OtherWorkPlace\" type=\"text\" value=\"test\" id=\"OtherWorkPlace\"/>", "-1"));

此radiobuttonlist位于用户控件中。 在第一次我没有添加if(!ispostpage)所以当我尝试Request.Form["OtherWorkPlace"]时,它没有返回任何内容

我添加代码if(!ispostpage)后,会弹出错误“对象引用未设置为对象的实例”

那么如何获取输入文本框的值?

3 个答案:

答案 0 :(得分:2)

不确定这是否会对您有所帮助,但是如果您在页面中放置一个asp:TextBox控件并且只有在选中“其他”单选按钮时从中检索值才会有帮助吗?选中“其他”单选按钮后,可以在客户端显示此文本框。可以使用CSS将文本框放在单选按钮旁边。

答案 1 :(得分:1)

您可以在asp .net端使用隐藏字段控件。

<asp:HiddenField runat="server" ID="rbOtherText" />

使用javascript onblur事件设置控件的值。

 PlaceofWork.Items.Add(new ListItem("Other - Specify<input name=\"OtherWorkPlace\" type=\"text\" value=\"test\" onblur=\"document.getElementById('" & rbOtherText.ClientID & "').value = this.value;\" />", "-1"));

然后在后面的代码中引用HiddenField。

答案 2 :(得分:1)

runat =“server”没有给你买任何东西,它可能只是直接渲染到输出中。如果您在页面上查看源时可以看到它,则它不会被处理为服务器端控件。我会摆脱它。

添加ID属性,其值与name属性相同:

PlaceofWork.Items.Add(new ListItem("Other - Specify<input id=\"OtherWorkPlace\" name=\"OtherWorkPlace\" type=\"text\" value=\"test\"/>", "-1"));

请记住,ID必须是唯一的,因此每页只能有一个而不更改命名约定。然后,您可以在Form集合中看到它,就像您之前尝试过的那样。

<强> ASPX

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<%@ Register src="WebUserControl1.ascx" tagname="WebUserControl1" tagprefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <uc1:WebUserControl1 ID="WebUserControl11" runat="server" />

        <br />
        <asp:Button ID="Button1" runat="server" Text="Submit" />

    </div>
    </form>
</body>
</html>

ASPX代码落后

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        string result = Request.Form["OtherWorkPlace"].ToString();
    }
}

<强> ASCX

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.WebUserControl1" %>

<asp:RadioButtonList ID="RadioButtonList1" runat="server">
</asp:RadioButtonList>

ASCX代码

protected void Page_Load(object sender, EventArgs e)
{
    var list = new List<string>();
    list.Add("1");
    list.Add("2");
    list.Add("3");

    if (!IsPostBack)
    {
        RadioButtonList1.DataSource = list;
        RadioButtonList1.DataBind();
        //RadioButtonList1.DataTextField = "Value";
        //RadioButtonList1.DataValueField = "Key";
        RadioButtonList1.Items.Add(new ListItem("Other - Specify<input id=\"OtherWorkPlace\" name=\"OtherWorkPlace\" type=\"text\" value=\"test\" />", "-1"));
    }
}

如果你的RadioButtonList在UserControl中,听起来你想在多个地方重复使用它,甚至可能在同一页面上。如果是这样,您肯定会想出一种管理ID的方法,这样它们就不会发生冲突。