使用jQuery查找未选中的复选框,并将名称传递给C#代码
这是我的代码:使用jQuery查找未选中的复选框,并将名称传递给C#代码,c#,jquery,asp.net,C#,Jquery,Asp.net,这是我的代码: public class MyCollection { internal static Dictionary<string, CheckBox> MyCheckBox = new Dictionary<string, CheckBox>(); } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) {
public class MyCollection {
internal static Dictionary<string, CheckBox> MyCheckBox = new Dictionary<string, CheckBox>();
}
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
CheckBox chk1 = new CheckBox();
chk1.ID = "chk1";
chk1.Checked = true;
if (!MyCollection.MyCheckBox.ContainsKey(chk1.ID))
MyCollection.MyCheckBox.Add(chk1.ID, chk1);
CheckBox chk2 = new CheckBox();
chk2.ID = "chk2";
chk2.Checked = true;
if (!MyCollection.MyCheckBox.ContainsKey(chk2.ID))
MyCollection.MyCheckBox.Add(chk2.ID, chk2);
pl1.Controls.Add(chk1);
pl2.Controls.Add(chk2);
}
}
protected void btn1Click(object sender, EventArgs e) {
lit1.Text = "Chk1.Checked: " + MyCollection.MyCheckBox["chk1"].Checked.ToString();
lit1.Text += "<br />Chk2.Checked: " + MyCollection.MyCheckBox["chk2"].Checked.ToString();
}
但是这段代码只是在控制台上写sList如何在C代码中检索sList值?请记住一些简单的事情:您必须在每次回发上添加动态控件。这将节省大量时间。请记住一些简单的事情:您必须在每次回发中添加动态控件。这将节省您大量的时间。首先,您应该不要在静态成员中存储控件实例,例如
复选框,因为这会导致应用程序内存泄漏。ASP.NET控件
类持有对其包含的页面的引用
,因此通过将控件
添加到静态集合中,可以防止整个页面
实例及其所有子控件
被垃圾收集
其次,在你的情况下这样做是没有意义的,因为它不会实现你想要做的。添加到字典
中的复选框
类的实例将与您希望在后续请求中与之交互的实例不同;您存储在字典中的实例仅用于该请求,这就是为什么复选框
实例总是从其选中的属性返回true
我认为JQuery与此无关,因为这无助于您在服务器上重新构建复选框
控件。您需要做的是在每次请求时将复选框
控件添加到页面
。为了使复选框
控件从表单
集合加载其状态,您需要在页面
生命周期中尽早添加控件:我建议尝试在页面.Init
事件期间添加它们
public void Page_Init(object sender, EventArgs e)
{
CheckBox chk1 = new CheckBox();
chk1.ID = "Chk1";
CheckBox chk2 = new CheckBox();
ck2.ID = "Chk2";
if(!IsPostBack)
{
ck1.Checked = true;
ck2.Checked = true;
}
p1.Controls.Add(chk1);
p2.Controls.Add(chk2);
}
如果没有实际的代码,就很难理解您要做什么以及如何进行。但是,事实仍然是,如果您不在每次请求时将复选框控件添加到页面中,则它们无法参与页面生命周期,并且在提交页面时不会从表单集合中加载它们的状态。在我看来,您似乎想要在服务器上操作页面的控制树,但这需要在每个请求上重新构建,并且仅在处理请求期间存在。将页面呈现给客户端后,控件树不再存在
因此,您可以使用JavaScript将HTML输入复选框的值发布到服务器,但是您会将它们发送到哪里,以及您希望发生什么?您似乎在反对ASP.NET Webforms的做法,这种做法围绕着回发邮件和服务器上处理请求的页面对象展开。首先,您应该永远不要在静态成员中存储控件实例,例如复选框
,因为这会导致应用程序内存泄漏。ASP.NET控件
类持有对其包含的页面的引用
,因此通过将控件
添加到静态集合中,可以防止整个页面
实例及其所有子控件
被垃圾收集
其次,在你的情况下这样做是没有意义的,因为它不会实现你想要做的。添加到字典
中的复选框
类的实例将与您希望在后续请求中与之交互的实例不同;您存储在字典中的实例仅用于该请求,这就是为什么复选框
实例总是从其选中的属性返回true
我认为JQuery与此无关,因为这无助于您在服务器上重新构建复选框
控件。您需要做的是在每次请求时将复选框
控件添加到页面
。为了使复选框
控件从表单
集合加载其状态,您需要在页面
生命周期中尽早添加控件:我建议尝试在页面.Init
事件期间添加它们
public void Page_Init(object sender, EventArgs e)
{
CheckBox chk1 = new CheckBox();
chk1.ID = "Chk1";
CheckBox chk2 = new CheckBox();
ck2.ID = "Chk2";
if(!IsPostBack)
{
ck1.Checked = true;
ck2.Checked = true;
}
p1.Controls.Add(chk1);
p2.Controls.Add(chk2);
}
如果没有实际的代码,就很难理解您要做什么以及如何进行。但是,事实仍然是,如果您不在每次请求时将复选框控件添加到页面中,则它们无法参与页面生命周期,并且在提交页面时不会从表单集合中加载它们的状态。在我看来,您似乎想要在服务器上操作页面的控制树,但这需要在每个请求上重新构建,并且仅在处理请求期间存在。将页面呈现给客户端后,控件树不再存在
因此,您可以使用JavaScript将HTML输入复选框的值发布到服务器,但是您会将它们发送到哪里,以及您希望发生什么?您似乎正在与ASP.NET Webforms的做法作斗争,这种做法围绕回发邮件和服务器上处理请求的页面对象展开。使用此方法可能有用这是您所需的全部测试,并让我知道结果:
使用这一个可能有用这是您所需的全部测试它并让我知道结果:
感谢静态成员,但实际上我认为我不能在页面中添加控件,因为我上面的代码只是一个示例,而实际项目是一个用户控件,它可以从一个类型动态定义和呈现控件,嗯,场景是这样的:客户端添加用户控件的集合