C# 在中继器内的灯箱中查找单选按钮的选定值

C# 在中继器内的灯箱中查找单选按钮的选定值,c#,fancybox,repeater,radiobuttonlist,commandargument,C#,Fancybox,Repeater,Radiobuttonlist,Commandargument,我有一个中继器,其中包含一个标记为“更改成员资格”的链接,单击该链接会打开一个带有无线电按钮列表和按钮的灯箱。单击lightbox中的按钮时,我有一个回调事件,我需要首先找到radiobutton列表的选定值这里是中继器: <script language="JavaScript" type="text/javascript"> function CreateBox(id) { $(document).ready(function () { $("

我有一个
中继器
,其中包含一个标记为“更改成员资格”的链接,单击该链接会打开一个带有
无线电按钮列表
按钮
的灯箱。单击lightbox中的按钮时,我有一个回调事件,我需要首先找到radiobutton列表的选定值这里是中继器:

  <script language="JavaScript" type="text/javascript">
    function CreateBox(id) {
    $(document).ready(function () {
        $("#lnk" + id).fancybox({
            'closeBtn': true,
            helpers: {
                overlay: { closeClick: false }
            }
        });
    });
 }
</script>
我可以设置断点,并且可以看到hiddenfields中的值是正确的,但是我无法获取此语句上的右键单击值:

sMemType = rdbList.SelectedValue;

我得到的是初始值,但不是用户单击的值?

首先,您的实际代码中缺少
OnItemCommand=“lbSetMemType\u命令”
。 此外,手动遍历中继器会导致性能下降,特别是当您只寻找单选按钮的值时

现在,让我们一起做一个例子。根据您的代码,您正试图在
中继器
内构建一个
RadioButton列表
,其中一个
LinkButton
使用收音机的按钮值。在我们的例子中,让我们在标签中打印所述choosen按钮的值,以证明我们的情况

MCVE.aspx

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
   <asp:Repeater ID="rptTest" runat="server" OnItemCommand="rptTest_ItemCommand">
<ItemTemplate>
     <asp:RadioButtonList ID="rdlTest" runat="server">
                        <asp:ListItem Text="Annual" Value="Annual"></asp:ListItem>
                        <asp:ListItem Text="Life" Value="Life"></asp:ListItem>
                        <asp:ListItem Text="Installment" Value="Installment"></asp:ListItem>
                    </asp:RadioButtonList>
    <asp:LinkButton runat="server" ID="lbValidationTest" OnClick="lbValidationTest_Click" runat="server" >Fetch Value</asp:LinkButton>
</ItemTemplate>
   </asp:Repeater>
    <asp:Label runat="server" ID="lblViewResult"></asp:Label>
</asp:Content>
我们只改变了三件事。我们将为我们将要创建的每个radiobuttonlist跟踪一个隐藏字段,我们添加了一个脚本来更改所述隐藏字段的值,并将两者与onclic链接

现在,在我们的codebehind中,我们只需通过单击按钮链接(即,在相同的
RepeaterItem
)来跟踪分组的隐藏字段,就可以开始了

MCVE.aspx.cs新版本

<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
   <asp:Repeater ID="rptTest" runat="server" OnItemCommand="rptTest_ItemCommand">
<ItemTemplate>
    <div>
    <asp:HiddenField runat="server" ID="hfSelectedValue" />
     <asp:RadioButtonList ID="rdlTest" runat="server" >
                        <asp:ListItem Text="Annual" Value="Annual" onclick="QuickAndDirtyHiddenSetDontUseItInProd(this)"></asp:ListItem>
                        <asp:ListItem Text="Life" Value="Life" onclick="QuickAndDirtyHiddenSetDontUseItInProd(this)"></asp:ListItem>
                        <asp:ListItem Text="Installment" Value="Installment" onclick="QuickAndDirtyHiddenSetDontUseItInProd(this)"></asp:ListItem>
                    </asp:RadioButtonList>
    <asp:LinkButton runat="server" ID="lbValidationTest"  runat="server" UserSubmitBehavior="true" >Fetch Value</asp:LinkButton>
        </div>
</ItemTemplate>
   </asp:Repeater>
    <asp:Label runat="server" ID="lblViewResult"></asp:Label>
    <script>
        function QuickAndDirtyHiddenSetDontUseItInProd(data) {
            $(data).parent().parent().parent().parent().siblings("input[name*=hfSelectedValue]").val(data.value);
        }
    </script>
</asp:Content>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication
{
    public partial class MCVE: Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                List<int> uselessData = new List<int>(new int[] { 1, 2 });
                this.rptTest.DataSource = uselessData;
                this.rptTest.DataBind();
            }
        }

        protected void rptTest_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            HiddenField hiddenField = (HiddenField)e.Item.FindControl("hfSelectedValue");
            this.lblViewResult.Text = hiddenField.Value;
        }

    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
命名空间Web应用程序
{
公共部分类MCVE:第页
{
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!Page.IsPostBack)
{
List USELESDATA=新列表(新int[]{1,2});
this.rptTest.DataSource=uselessData;
this.rptTest.DataBind();
}
}
受保护的无效rptTest_ItemCommand(对象源,RepeaterCommandEventArgs e)
{
HiddenField HiddenField=(HiddenField)e.Item.FindControl(“hfSelectedValue”);
this.lblViewResult.Text=hiddenField.Value;
}
}
}

非常不言自明,我们只是在中继器中找到隐藏字段,然后用它填充标签。

使用ajax调用传递单击的索引1。请提供您正在使用的“fancybox”库的链接。2.使用浏览器的开发人员工具,在单击“保存”按钮时检查POST请求的内容。您是否在任何地方看到了rblMemberTypes?jquery.fancybox.css?v=2.1.3[link]您如何知道在javascript中放入.parent()多少次才能到达hiddenfield所在的适当层?它看起来丑陋而脆弱,层中的任何更改都会破坏它。我已取出RadioButtonList asp控件,将其替换为:
,并添加了两个javascript调用ajax,如下所示:function SetAnnual(){$.ajax({type:“POST”,url:“NewMemberApprovals.aspx/GetSelectedMemType”,contentType:“application/json;charset=utf-8”,数据:“{'intex':'annual'}”,数据类型:“json”,成功:成功,失败:函数(响应){//alert(response.d);});所有这些功能似乎都正常工作,但现在的问题是我需要从代码中预先选择html单选按钮behind@Lyle对于javascript来说,是的,它很难看,因此它是函数名。使用呈现的id构建适当的选择器或进行适当的搜索会更好。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication
{
    public partial class MCVE: Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        if (!Page.IsPostBack)
            {
                List<int> uselessData = new List<int>(new int[] { 1, 2 });
                this.rptTest.DataSource = uselessData;
                this.rptTest.DataBind();
            }
        }    
        protected void rptTest_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            RadioButtonList list = (RadioButtonList)e.Item.FindControl("rdlTest");
            this.lblViewResult.Text = list.SelectedValue;
        }
    }
}
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
   <asp:Repeater ID="rptTest" runat="server" OnItemCommand="rptTest_ItemCommand">
<ItemTemplate>
    <div>
    <asp:HiddenField runat="server" ID="hfSelectedValue" />
     <asp:RadioButtonList ID="rdlTest" runat="server" >
                        <asp:ListItem Text="Annual" Value="Annual" onclick="QuickAndDirtyHiddenSetDontUseItInProd(this)"></asp:ListItem>
                        <asp:ListItem Text="Life" Value="Life" onclick="QuickAndDirtyHiddenSetDontUseItInProd(this)"></asp:ListItem>
                        <asp:ListItem Text="Installment" Value="Installment" onclick="QuickAndDirtyHiddenSetDontUseItInProd(this)"></asp:ListItem>
                    </asp:RadioButtonList>
    <asp:LinkButton runat="server" ID="lbValidationTest"  runat="server" UserSubmitBehavior="true" >Fetch Value</asp:LinkButton>
        </div>
</ItemTemplate>
   </asp:Repeater>
    <asp:Label runat="server" ID="lblViewResult"></asp:Label>
    <script>
        function QuickAndDirtyHiddenSetDontUseItInProd(data) {
            $(data).parent().parent().parent().parent().siblings("input[name*=hfSelectedValue]").val(data.value);
        }
    </script>
</asp:Content>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication
{
    public partial class MCVE: Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                List<int> uselessData = new List<int>(new int[] { 1, 2 });
                this.rptTest.DataSource = uselessData;
                this.rptTest.DataBind();
            }
        }

        protected void rptTest_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            HiddenField hiddenField = (HiddenField)e.Item.FindControl("hfSelectedValue");
            this.lblViewResult.Text = hiddenField.Value;
        }

    }
}