微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 JQuery 选中/取消选中后,RadioListButton 选择无法正常工作

如何解决从 JQuery 选中/取消选中后,RadioListButton 选择无法正常工作

我有一个 radiobuttonList,它有三个选项,值为 1、2、3,用户不能取消选择。我添加了一些 jquery 来检查/取消选中选择,但它无法正常工作。 根据代码,新的 radiolist 控件被创建,无论它在 DB 中有什么值,它都会选择它并使该选择 = true。现在,当我切换选中/取消选中并保存页面重新加载并再次调用 createchildcontrol 并设置来自 db 的先前值并且 selectedvalue 显示为 prev 值时,它没有将 selectedvalue 显示为 null。

控件代码如下

using System;
using System.Collections.Generic;

namespace Web.UI.WebControls
{
    using System.Drawing;
    using System.Linq;
    using System.Web.UI.WebControls;
    using System.Web.UI;

    using Web.UI.Interfaces;

    /// <summary>
    /// This server control provides a list of radio buttons. 
    /// </summary>
    public class SaicOtherSpecRadioButtonList : SaicCustomControlBase,IDataControl
    {
        /// <summary>
        /// Label for Radio buttons - Yes,No.
        /// </summary>
        protected Label MyLabel;

        public IList<ILookupItem> ListItems = new List<ILookupItem>();

        /// <summary>
        /// Instruction for this control Item
        /// </summary>
        protected Label MyInstructionLabel;


        /// <summary>
        /// Other Label (usually it is "Other")
        /// </summary>
        protected Label MySpecifyLabel;

        /// <summary>
        /// Specify Text Box
        /// </summary>
        protected TextBox MyOtherSpecTextBox; 

        protected LiteralControl Brk;
        /// <summary>
        /// Radio button list Yes,No
        /// </summary>
        protected RadioButtonList MyRadioList; //instantiate here so that object will be created to add validation on.

        /// <summary>
        /// Validator Indicator -- "&larr;"
        /// </summary>
        protected Label MyValidatorIndicator = new Label();

        /// <summary>
        /// Validator Indicator -- "&larr;"
        /// </summary>

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            this.Page.Validators.Add(this);
        }

        /// <summary>
        /// SaicRadio: Label + SpecifyLabel + Other TextBox + RadioButtonList
        /// </summary>
        protected override void CreateChildControls()
        {
            Controls.Clear();
         
            var rdId = MainControlId;

            OtherSpecTextBoxId = NamePrefix + ControlItem.Dash + 1 + PartialId;

            // add a Yes/No RadioButtonList
            MyRadioList = new RadioButtonList
            {
                ID = rdId,RepeatDirection = RepeatDirection.Horizontal,RepeatLayout = RepeatLayout.Flow,EnableViewState = true,RepeatColumns = 3
            };

            MyRadioList.DataValueField = "ItemValue";
            MyRadioList.DataTextField = "ItemName";
            MyRadioList.DataSource = ListItems;
            MyRadioList.DataBind();
            if (!String.IsNullOrEmpty(base.Text))
            {

                MyRadioList.Items.FindByValue(base.Text).Selected = true;
            }
            else
            {
                MyRadioList.SelectedValue = null;
            }
            for (var i = 0; i < ListItems.Count; i++)
            {
                MyRadioList.Items[i].Attributes.Add("title",ListItems[i].ItemName);
            }

            Controls.Add(MyRadioList);

            // add a place holder to put the validation indicator
            Controls.Add(this.MyValidatorIndicator);
            MyValidatorIndicator.CssClass = "ValidatorIndicator";

            // the Label object with AssociatedControlID set creates the HTML <label> tag
            MyLabel = new Label
            {
                EnableViewState = true,Text = this.Title,CssClass = "OtherLabel_" + MainControlId,AssociatedControlID = rdId
            };
            Controls.Add(MyLabel);

            MySpecifyLabel = new Label
            {
                EnableViewState = false,Text = string.IsNullOrEmpty(DecoText) ? this.Title : DecoText,// (Deco Text is set in the database) DM
                // (DecoText didn't seem to be set anywhere,label should say specify.)
                //Text = " - Specify: ",AssociatedControlID = OtherSpecTextBoxId,CssClass = string.IsNullOrEmpty(DecoText) ? "HiddenLabel" : "SpecifyLabel_" + MainControlId
            };
            Controls.Add(MySpecifyLabel);

            // add other spec textBox
            MyOtherSpecTextBox = new TextBox
            {
                ID = OtherSpecTextBoxId,Text = base.OtherText,Width = OtherSpecTextBoxWidth,MaxLength = 210,CssClass = "SpecifyDescBox_" + MainControlId,//Enabled = !string.IsNullOrEmpty(base.OtherText)
            };
            Controls.Add(MyOtherSpecTextBox);


            // add a break
            if (!string.IsNullOrEmpty(Instruction))
            {
                MyInstructionLabel = new Label
                {
                    EnableViewState = false,Text = Instruction,CssClass = "instruction noBold displayBlock clearFloat"
                };
                Controls.Add(MyInstructionLabel);
            }

            Brk = new LiteralControl { Text = "<br/>" };
            Controls.Add(Brk);
        }



        protected override void RenderContents(HtmlTextWriter writer)
        {
            writer.AddAttribute(HtmlTextWriterattribute.Class,"OtherSpecLabel");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);
            MyLabel.RenderControl(writer);
            if (ListItems[0].LookupGroup == "OrgType")
            {
                Brk.RenderControl(writer);
            }
            MySpecifyLabel.RenderControl(writer);
            MyOtherSpecTextBox.RenderControl(writer);
            writer.RenderEndTag();
            MyRadioList.RenderControl(writer);
            MyValidatorIndicator.RenderControl(writer);

            if (MyInstructionLabel != null)
            {
                MyInstructionLabel.RenderControl(writer);
            }
        }

        /// <summary>
        /// A value that indicates if the checkBox is checked. "True" if checked,"False" if not,NULL if not selected.
        /// The Get property is used at post back processing time for data saving.
        /// </summary>
        public override string Text
        {
            get
            {
                return (MyRadioList != null)
                           ? (MyRadioList.SelectedValue.Equals(string.Empty) ? null : MyRadioList.SelectedValue)
                           : base.Text;
            }
        }

        public override string OtherText
        {
            get
            {
                if (MyOtherSpecTextBox == null)
                {
                    return base.OtherText;
                }
                if (string.IsNullOrEmpty(MyOtherSpecTextBox.Text.Trim()))
                {
                    return null;
                }
                return MyOtherSpecTextBox.Text.Trim();
            }
        }

        private bool InternalCheck(ISaicValidator validator)
        {
            bool retVal = true;
            if (!MyRadioList.SelectedValue.Equals(string.Empty) && MyOtherSpecTextBox.Text.Trim().Length <= 0)
            {
                retVal = false;
                ErrorMessage = validator.GetAnchoredErrorMessage(MyOtherSpecTextBox.ClientID) + " Please specify if it is checked.";
            }
            else if (MyRadioList.SelectedValue.Equals(string.Empty) && MyOtherSpecTextBox.Text.Trim().Length > 0)
            {
                retVal = false;
                ErrorMessage = validator.GetAnchoredErrorMessage(MyRadioList.ClientID) + " Please check if it is specified.";
            }

            return retVal;
        }

        protected override bool EvaluateIsValid()
        {
            var retVal = true;
            if (MyRadioList == null)
            {
                return retVal;
            }

            ErrorMessage = string.Empty;

            if (Validators != null)
            {
                foreach (var validator in Validators)
                {
                    switch (validator.ValidationType)
                    {
                        case ValidationType.required:
                            if (!IsFormComplete)
                                retVal = true;
                            else
                            {
                                validator.Validate(MyRadioList.Text);
                                retVal = validator.IsValid;
                                ErrorMessage = !retVal ? validator.ErrorMessage : "";
                                ErrorMessage = validator.GetAnchoredErrorMessage(MyRadioList.ClientID);
                            }
                            break;
                        case ValidationType.Internal:
                            retVal = InternalCheck(validator);
                            break;

                    }
                }
            }

            MyValidatorIndicator.Text = retVal ? "" : ValidatorIndicator;

            return retVal;
        }
    }
}

$("input:radio[id*='OtherRdList-0_" + partialId + "']").click(function () {
        
        if (checkstate) {
            $("input:radio[id*='OtherRdList-0_" + partialId + "']").removeAttr("checked");
            checkstate = $("input:radio[id*='OtherRdList-0_" + partialId + "']").is(":checked");
        }
        else if (!checkstate) {
            $("input:radio[id*='OtherRdList-0_" + partialId + "']").prop("checked",true);
            checkstate = $("input:radio[id*='OtherRdList-0_" + partialId + "']").is(":checked");
        }
    });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?