我的代码中的逻辑错误

时间:2013-01-29 15:17:40

标签: asp.net web-applications

在页面加载时,下拉列表的默认值告诉用户选择有效值 其中男性或女性。如果用户未选择以下任一值:男性或女性,则应禁用Genereate PatientNumber按钮。
否则,根据值select生成患者性别。 目前,如果下拉列表处于默认值,我仍然可以生成patientNumber 有人帮我解决错误的原因。我更喜欢正确的代码。

protected void patient_num_Click(object sender, EventArgs e)
    {
        String gender = drl_gender.Text.ToString();
        string patientNumber = " ";
        RegistrationNumber Register_patient = new RegistrationNumber();
        patient_num.Enabled = false;
        if (gender=="Select Gender")
        {
            patient_num.Enabled = false;


        }
        else if (gender=="Male")
        {
            patient_num.Enabled = true;
            patientNumber = Register_patient.GeneratePatientNumber(Gender.Male).ToString();
            patientNumber = patientNumber.Replace("/", "-");
            txtpatientNum.Text = patientNumber;


        }
        else
        {
            patient_num.Enabled = true;
            patientNumber = Register_patient.GeneratePatientNumber(Gender.Female).ToString();
            patientNumber = patientNumber.Replace("/", "-");
            txtpatientNum.Text = patientNumber;

        }


    }

3 个答案:

答案 0 :(得分:2)

您的代码中的问题是您使用Text的{​​{1}}属性来确定用户选择了什么(而不是使用DropDownList)。如果未选择任何项目,则SelectedValue属性会返回当前所选项目Text的文字

MSDN

  

Text属性获取并设置与SelectedValuee相同的值   财产呢。 SelectedValue属性通常用于   确定ListControl控件中所选项的值。   如果未选择任何项目,则返回空字符串(“”)

现在看看你的代码(当没有选择任何东西时记住""):

String.Empty

解决方案:

使用RequiredFieldValidator代替确保用户选择了性别。您可以使用InitialValue属性告诉它if (gender=="Select Gender") { patient_num.Enabled = false; } .... else { patient_num.Enabled = true; // here we are! patientNumber = Register_patient.GeneratePatientNumber(Gender.Female).ToString(); patientNumber = patientNumber.Replace("/", "-"); txtpatientNum.Text = patientNumber; } 项的值。

"-- please select --"

答案 1 :(得分:0)

我会改变你的逻辑,以便你明确检查男性,女性,然后。

if (gender=="Male")
{
    ...    
}
else if (gender=="Female")
{
    ...
}
else
{
    ...
}

要回答您的实际问题,您的下拉列表的价值可能并不正确。也许它是套管或流浪角色空间。你可以试试像

这样的东西
String gender = drl_gender.Text.Trim().ToLower();

并检查小写男性,女性。在线上放置一个断点或添加一个手表,看看实际值是什么。

答案 2 :(得分:0)

您要执行的操作是默认情况下将按钮设置为disabled 然后你应该有一个挂钩到DropDownList的事件:

protected void DropDownList_IndexChanged(object sender, EventArgs e)
{
  var dd = (DropDownList) sender;
  patient_num.Enabled = dd.SelectedIndex > 0;
}