【问题标题】:If text box value is null then set dropdown list to null如果文本框值为空,则将下拉列表设置为空
【发布时间】:2014-10-03 23:39:55
【问题描述】:

我在 .NET 上有一个 C# 页面,它有一个从数据库填充的下拉菜单,该下拉菜单包含手机号码的拨号代码,默认为“英国 (+44)”

不过,我还有一个手机号码框,用户可以在其中输入手机号码。目前,如果用户在没有手机号码的情况下保存(这是允许的),拨号代码仍将传递给 SP 并最终被保存。

我想找到一种方法来阻止这种情况发生,因此如果用户没有输入手机号码,则在输入数据库时​​拨号代码将设置为空。

最好的方法是什么?

这是 C#

    using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Dnuk.Core.DataAccess.UserOptIn;
using Dnuk.Core.Entities2;
using Dnuk.Core.DataAccess.CommonData;
using Dnuk.Core.DataAccess.Framework;



namespace Registration
{

    /// <summary>
    /// Summary description for Step2.
    /// </summary>
    public partial class Step2 : Basepage
    {

        protected int countryid = 240;

        protected AJAXFunctions m_AJAXFunctions;


        protected void Page_Load(object sender, System.EventArgs e)
        {

            StringBuilder helptext = new StringBuilder();
            helptext.AppendLine("<span class='bluetext2'>Your password must:-</span>");
            helptext.AppendLine("");
            helptext.AppendLine("<ul class='bluetext2'>");
            helptext.AppendLine("   <li>Have at least 9 characters</li>");
            helptext.AppendLine("    <li>Contain mixed case letters</li>");
            helptext.AppendLine("    <li>Contain at least 1 number OR a special character</li>");
            helptext.AppendLine("</ul>");
            helptext.AppendLine("");
            helptext.AppendLine("<p class='bluetext2'>Allowed characters are: a-z, A-Z, 0-9, and these special characters: !@#$*^().,{}[]~-</p>");
            helptext.AppendLine("");
            helptext.AppendLine("<span class='bluetext2'>Not accepted:-</span>");
            helptext.AppendLine("");
            helptext.AppendLine("<ul class='bluetext2'>");
            helptext.AppendLine("    <li>the word 'password'</li>");
            helptext.AppendLine("    <li>using your username</li>");
            helptext.AppendLine("</ul>");

            Helpicon11.Text = helptext.ToString();

            m_AJAXFunctions = new AJAXFunctions();
            m_AJAXFunctions.Register();

            if (!Page.IsPostBack)
            {
                ddlSpecialityList.Attributes.Add("onchange", "SpecialityList_Change();");
                lsbSubSpecialityUser.Style.Add("width", "200px");
                imbNext.Attributes.Add("onclick", "return Validation();");
                ddlProfessionalStatusList.Attributes.Add("onchange", "CheckProfStatusSeniority();");
                ddlSeniorityList.Attributes.Add("onchange", "CheckProfStatusSeniority();");
                ddlCountry.Attributes.Add("onchange", "ChangeCountry();");
                FillData();
                FillUserData();
            }
        }


        protected void ddlSeniorityList_Fill()
        {
            ddlSeniorityList.DataTextField = "name";
            ddlSeniorityList.DataValueField = "seniorityid";

            using (DBAccess db = new DBAccess())
            {
                ddlSeniorityList.DataSource = (db.GetSpecialitySeniorityList(countryid)).Tables[0];
            }

            ddlSeniorityList.DataBind();
            ddlSeniorityList.Items.Insert(0, new ListItem("please select", "0"));
        }


        protected void ddlSpecialityList_Fill()
        {
            ddlSpecialityList.DataTextField = "name";
            ddlSpecialityList.DataValueField = "specialityid";

            using (DBAccess db = new DBAccess())
            {
                ddlSpecialityList.DataSource = (db.GetSpecialitySeniorityList(countryid)).Tables[1];
            }

            ddlSpecialityList.DataBind();
            ddlSpecialityList.Items.Insert(0, new ListItem("please select", "0"));
        }


        protected void ddlProfessionalStatusList_Fill()
        {
            ddlProfessionalStatusList.DataTextField = "title";
            ddlProfessionalStatusList.DataValueField = "ProfStatusId";

            using (DBAccess db = new DBAccess())
            {
                ddlProfessionalStatusList.DataSource = db.GetProfessionalStatusList();
            }

            ddlProfessionalStatusList.DataBind();
        }


        protected void ddlCountry_Fill()
        {
            ddlCountry.DataTextField = "countryname";
            ddlCountry.DataValueField = "countryid";

            using (DBAccess db = new DBAccess())
            {
                ddlCountry.DataSource = db.GetCountryList();
            }

            ddlCountry.DataBind();
            ddlCountry.Items.Insert(0, new ListItem("please select", "0"));
        }


        protected void cLVOptins_Fill()
        {
            UserOptInDAO userOptInDAO = new UserOptInDAO();
            cLVOptins.DataSource = userOptInDAO.GetRegistrationOptInList();
            cLVOptins.DataBind();
        }


        private void FillData()
        {
            ddlSeniorityList_Fill();
            ddlSpecialityList_Fill();
            ddlProfessionalStatusList_Fill();
            ddlCountry_Fill();
            cLVOptins_Fill();
        }


        protected void FillUserData()
        {
            if (Session["Registration_RegInfo"] != null)
            {
                RegInfo ri = (RegInfo)Session["Registration_RegInfo"];

                if (ddlSeniorityList.Items.FindByValue(Convert.ToString(ri.SeniorityID)) != null)
                    ddlSeniorityList.SelectedValue = Convert.ToString(ri.SeniorityID);
                if (ddlSpecialityList.Items.FindByValue(Convert.ToString(ri.SpecialityID)) != null)
                    ddlSpecialityList.SelectedValue = Convert.ToString(ri.SpecialityID);
                ddlProfessionalStatusList.SelectedValue = Convert.ToString(ri.ProfessionalStatusID);
                hdnPCT_NHSID.Value = Convert.ToString(ri.PCT_NHSID);
                hdnGP_TrustID.Value = Convert.ToString(ri.GP_TrustID);

                using (DBAccess helper = new DBAccess())
                {
                    if (ri.HPOTypeIDs != null)
                    {
                        hdnHPOTypeIDs.Value = Convert.ToString(ri.HPOTypeIDs);
                    }
                    else
                    {
                        //the default HPO types should be "All"
                        DataTable dt = helper.GetHPOTypes();
                        foreach (DataRow dr in dt.Rows)
                        {
                            hdnHPOTypeIDs.Value += Convert.ToString(dr["OrgnTypeID"]) + ",";
                        }
                        if (hdnHPOTypeIDs.Value.Length > 0)
                            hdnHPOTypeIDs.Value = hdnHPOTypeIDs.Value.Substring(0, hdnHPOTypeIDs.Value.Length-1);

                    }
                    this.lblSelectedOrgTypes.Text = helper.GetHPOTypeNames(hdnHPOTypeIDs.Value);
                }

                ddlDialingCode.Text = ri.DialingCodeText;
                txbPostcode.Text = ri.Postcode;
                txbLocality.Text = ri.Locality;
                txbAddress1.Text = ri.Address1;
                txbAddress2.Text = ri.Address2;
                txbCity.Text = ri.City;
                txbCounty.Text = ri.County;
                if (ri.CountryID != 0)
                    ddlCountry.SelectedValue = Convert.ToString(ri.CountryID);
                else
                    ddlCountry.SelectedValue = "240";

                txt_username.Value = ri.Username;

                txbAltEMail.Text = ri.AltEMail;
                if (ri.DialingCodeID != 0)
                    ddlDialingCode.SelectedValue = Convert.ToString(ri.DialingCode);
                else
                    ddlDialingCode.SelectedValue = "240";

                txbPhoneNumber.Text = ri.PhoneNumber;
                if (ri.SubSpecialityIDs != null)
                    SubSpecialityIDs = ri.SubSpecialityIDs; 
                txbSecWord1.Text = ri.SecWord1;
                txbSecWord2.Text = ri.SecWord2;


                if (ri.OptIns != null)
                {
                    foreach (KeyValuePair<Int32, bool> entry in ri.OptIns)
                    {
                        foreach (ListViewItem item in cLVOptins.Items)
                        {
                            CheckBox chkBox = (CheckBox)item.FindControl("cCbOptIn");
                            Int32 optInId = Convert.ToInt32(chkBox.InputAttributes["optId"]);

                            if (optInId == entry.Key)
                            {
                                chkBox.Checked = entry.Value;
                                break;
                            }

                        }
                    }
                }

            }
        }


        private void PutRegInfo()
        {
            if (Session["Registration_RegInfo"] != null)
            {
                RegInfo ri = (RegInfo)Session["Registration_RegInfo"];

                ri.SeniorityID = Convert.ToInt32(ddlSeniorityList.SelectedValue);
                ri.SpecialityID = Convert.ToInt32(ddlSpecialityList.SelectedValue);
                ri.SubSpecialityIDs = SubSpecialityIDs;
                ri.PCT_NHSID = Convert.ToInt32(hdnPCT_NHSID.Value);
                ri.GP_TrustID = Convert.ToInt32(hdnGP_TrustID.Value);
                ri.HPOTypeIDs = Convert.ToString(hdnHPOTypeIDs.Value);
                ri.ProfessionalStatusID = Convert.ToInt32(ddlProfessionalStatusList.SelectedValue);
                ri.Postcode = txbPostcode.Text.Trim();
                ri.Locality = txbLocality.Text.Trim();
                ri.Address1 = txbAddress1.Text.Trim();
                ri.Address2 = txbAddress2.Text.Trim();
                ri.City = txbCity.Text.Trim();
                ri.County = txbCounty.Text.Trim();
                ri.CountryID = Convert.ToInt32(ddlCountry.SelectedValue);

                ri.Username = txt_username.Value.Trim();
                ri.Password = txt_newpassw.Value.Trim();

                ri.AltEMail = txbAltEMail.Text.Trim();
                ri.PhoneNumber = txbPhoneNumber.Text.Trim();
                ri.DialingCodeID = Convert.ToInt32(ddlDialingCode.SelectedValue);
                ri.DialingCode = ddlDialingCode.SelectedValue;
                ri.DialingCodeText = ddlDialingCode.SelectedItem.Text;
                ri.SecWord1 = txbSecWord1.Text.Trim();
                ri.SecWord2 = txbSecWord2.Text.Trim();

                // string fields
                ri.Seniority = ddlSeniorityList.SelectedItem.Text;
                ri.Speciality = ddlSpecialityList.SelectedItem.Text;
                ri.SubSpecialities = SubSpecialities;
                ri.PCT_NHS = hdnPCT_NHS.Value;
                ri.GP_Trust = hdnGP_Trust.Value;
                ri.ProfessionalStatus = ddlProfessionalStatusList.SelectedItem.Text;
                ri.Country = ddlCountry.SelectedItem.Text;


                if (ri.OptIns == null)
                    ri.OptIns = new Dictionary<int, bool>();

                ri.OptIns.Clear();

                foreach (ListViewItem item in cLVOptins.Items)
                {
                    CheckBox chkBox = (CheckBox)item.FindControl("cCbOptIn");
                    Int32 optInId = Convert.ToInt32(chkBox.InputAttributes["optId"]);

                    ri.OptIns.Add(optInId, chkBox.Checked);
                }                

                Session.Add("Registration_RegInfo", ri);
            }
        }


        protected void imbNext_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {


            // check passwords
            using (DBAccess da = new DBAccess())
            {
                UP_Validation_Username.Username upv_uname = new UP_Validation_Username.Username();
                UP_Validation_Password.Password upv_pass = new UP_Validation_Password.Password();

                string codes = string.Empty;
                string codes1 = string.Empty;
                string codes2 = string.Empty;

                System.Configuration.AppSettingsReader _configReader = new System.Configuration.AppSettingsReader();
                string skey = _configReader.GetValue("UP_SecurityKey", typeof(string)).ToString();

                codes1 = upv_pass.Password_Validation_Lite(skey, txt_username.Value, txt_newpassw.Value, txt_newpassw1.Value);
                codes2 = upv_uname.Username_Validation(skey, txt_username.Value, 0);

                if (codes1 == "1" && codes2 == "1")
                {
                    codes = "1";
                }
                else
                {
                    codes = codes1 + "," + codes2;
                    char[] comma = new char[] { ',' };
                    codes = codes.TrimEnd(comma);
                    codes = codes.TrimStart(comma);
                }

                if (codes != "1")
                {
                    err_username.InnerHtml = "";
                    err_newpassw.InnerHtml = "";
                    err_newpassw1.InnerHtml = "";

                    DataSet ds = new DataSet();
                    ds = upv_pass.GetErrorMessages(skey, codes);

                    if (ds.Tables.Count > 0)
                    {
                        DataTable dt = new DataTable();
                        dt = ds.Tables[0];

                        foreach (DataRow dr in dt.Rows)
                        {
                            switch (dr["type"].ToString())
                            {
                                case "username":
                                    err_username.InnerHtml = err_username.InnerHtml + dr["message"].ToString() + "<br/>";
                                    break;
                                case "newpassword":
                                    err_newpassw.InnerHtml = err_newpassw.InnerHtml + dr["message"].ToString() + "<br/>";
                                    break;
                                case "newpassword1":
                                    err_newpassw1.InnerHtml = err_newpassw1.InnerHtml + dr["message"].ToString() + "<br/>";
                                    break;
                            }
                        }
                    }
                }
                else
                {
                    PutRegInfo();
                    if (Request.QueryString["redirecttoansaedu"] != null)
                        Response.Redirect("Step3.aspx?redirecttoansaedu=1", true);
                    else Response.Redirect("Step3.aspx", true);
                }

            }

        }


        protected int[] SubSpecialityIDs
        {
            get
            {
                const char DELIMITER = '\x0001';

                string[] sArray;
                if (hdnSubSpecialityIDs.Value == "")
                    sArray = new string[0];
                else
                    sArray = hdnSubSpecialityIDs.Value.Split(DELIMITER);

                return ConvertArray_ToInt(sArray);
            }
            set
            {
                const char DELIMITER = '\x0001';

                hdnSubSpecialityIDs.Value = String.Join(Convert.ToString(DELIMITER), ConvertArray_ToString(value));
            }
        }


        protected string[] SubSpecialities
        {
            get
            {
                const char DELIMITER = '\x0001';
                if (hdnSubSpecialityIDs.Value == "")
                    return new string[0];
                else
                    return hdnSubSpecialities.Value.Split(DELIMITER);
            }
            set
            {
                const char DELIMITER = '\x0001';

                hdnSubSpecialities.Value = String.Join(Convert.ToString(DELIMITER), value);
            }
        }


        protected int[] ConvertArray_ToInt(object[] array)
        {
            int[] result = new int[array.Length];

            for (int i = 0; i < array.Length; i++)
                result[i] = Convert.ToInt32(array[i]);

            return result;
        }


        protected string[] ConvertArray_ToString(int[] array)
        {
            string[] result = new string[array.Length];

            for (int i = 0; i < array.Length; i++)
                result[i] = Convert.ToString(array[i]);

            return result;
        }


        protected void cLVOptins_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            if (e.Item.ItemType == ListViewItemType.DataItem || e.Item.ItemType == ListViewItemType.EmptyItem)
            {
                UserOptIn optIn = (UserOptIn)e.Item.DataItem; 

                //Hide the help icon when there is no helptext
                if (optIn.HelpText == string.Empty)
                {
                    Registration.Controls.HelpIcon helpIcon = (Registration.Controls.HelpIcon)e.Item.FindControl("cHelpIconOptIn");
                    helpIcon.Visible = false;
                }

                //Remove indent where there is no parent
                if (optIn.ParentId == 0)
                {
                    Label cLblIndent = (Label)e.Item.FindControl("cLblIndent");
                    cLblIndent.Visible = false;
                }

                CheckBox chkBox = (CheckBox)e.Item.FindControl("cCbOptIn");
                chkBox.Checked = optIn.Default;
                chkBox.InputAttributes.Add("optId", optIn.Id.ToString());

                //bit of a hack
                if (optIn.Description.IndexOf("Market Research invitations") > -1)
                {
                    chkBox.Text = chkBox.Text + "<div class=\"greytext1 optInIndent\" optparentid=\"1\">You will receive invitations through the Doctors.net.uk website or by e-mail. Some surveys are also conducted by telephone. To ensure you are invited to these surveys as well, please indicate this below.</div>";
                }

            }
        }

        protected void DialingCodeDropDown_Init(object sender, EventArgs e)
        {
            CommonDataSource cds = new CommonDataSource();
            cds.SQLExecutorSource = new SQLHelperExecutorSource();
            List<RefCountry> countries = cds.RefCountries();
            List<ListItem> adjustedCountriesList = new List<ListItem>();    


            foreach (RefCountry country in countries)
            {
                if (country.DiallingCode.Trim() == "")
                    continue;

                ListItem item = new ListItem();
                item.Value = country.CountryID.ToString();
                item.Text = String.Format("{0} (+{1})", country.CountryName, country.DiallingCode.Trim());
                adjustedCountriesList.Add(item);               
            }


            ddlDialingCode.DataSource = adjustedCountriesList;            
            ddlDialingCode.DataBind();  


        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {    

        }
        #endregion
    }
}

这是HTML中定义的手机号码文本框

                    <tr>                                
                        <td align="right" valign="middle" class="bluetext2b">Mobile phone number</td>
                        <td><uc:HelpIcon id="Helpicon14" runat="server" Title="Mobile phone number" Text="Add your mobile number including the '0' and with no spaces. If you are not resident in the UK, please ensure you change the international dialling code to the appropriate country. Please note: Your mobile number will not be shared with a third party. If you opt in to take part in Market Research telephone surveys, this field will be mandatory. ."></uc:HelpIcon>&nbsp;</td>
                        <td><asp:DropDownList DataTextField="Text" DataValueField="Value" ID="ddlDialingCode" Runat="server" CssClass="myinput1" OnInit="DialingCodeDropDown_Init"></asp:DropDownList></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td></td>
                        <td><asp:TextBox ID="txbPhoneNumber" Runat="server" onkeypress="return /\d/.test(String.fromCharCode(((event||window.event).which||(event||window.event).which)));" MaxLength="11"></asp:TextBox></td>
                    </tr>

【问题讨论】:

    标签: c# sql .net stored-procedures


    【解决方案1】:

    只需检查手机号码字段是否为空。如果为空,则停止执行保存操作并返回一些消息。你可以这样检查:

    DialingCodeDropDown_Init 中,您可以添加一个默认 ListItem,其 Value = 0 和 Text = ""(如果可以,因为有时客户端必须没有此选项可供选择)。然后在PutRegInfo方法中包含:ri.PhoneNumber = txbPhoneNumber.Text.Trim();的行添加如下代码:

    if(!string.IsNullOrEmpty(txbPhoneNumber.Text))
    {
        ri.DialingCodeID = Convert.ToInt32(ddlDialingCode.SelectedValue);
        ri.DialingCode = ddlDialingCode.SelectedValue;
        ri.DialingCodeText = ddlDialingCode.SelectedItem.Text;
    }
    else
    {
        ri.DialingCodeID = 0;
        ri.DialingCode = "0";
        ri.DialingCodeText = "";
    }
    

    【讨论】:

    • 据我所知,这不起作用,因为不应该出现错误,因为允许用户不输入手机号码,但如果用户确实选择这样做,则选择值从下拉列表中应该为空
    • 好的,那么如果手机为空不显示错误消息,只需从下拉菜单中选择 0 元素(如果有)或将 string.Empty 放入 SQL 参数中。如果您需要更直接的帮助,请在问题中添加您的代码。
    • 仍然无法工作我在数据库中添加了一个新行,其中 0 作为 ID,'' 作为文本。我在 ri.PhoneNumber = txbPhoneNumber.Text.Trim(); 正下方提供的 IF 语句中添加了但它仍然节省了 240
    • 你能解释一下如果数字是空的应该是什么行为?数据库中的拨号代码应该保存什么?
    • 如果用户没有在手机号码文本框中输入任何信息,则拨号代码在数据库中应保存为0或null,只有当用户输入了手机号码时,才保存选择的拨号代码.然而,在页面加载时,拨号代码下拉菜单必须默认为 UK,其 ID 为 240。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 2017-05-15
    • 2020-07-29
    相关资源
    最近更新 更多