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;
}
}
}