2015-07-27 2 views
0

Я не могу подтвердить пустое поле ввода с помощью C# asp.net. На самом деле у меня есть два поля ввода. Мне нужно отобразить сообщение проверки для пустого поля ввода. Я сделал некоторую кодировку. Когда я нажимаю кнопку отправки без ввода каких-либо данных, я получаю сообщение об ошибке для первого ввода, зарегистрированного i.e., Name field can not be blank, и одну красную границу цвета в этом поле ввода. Когда я вводю ввод в первое поле ввода и снова нажав кнопку отправки, появляется сообщение об ошибке для второго поля ввода, но проблема заключается в том, что цвет границы отображается красным в первом поле ввода, которое не должно появляться. Я объясняю свой код ниже.Не удается проверить пустое поле ввода с помощью C# asp.net

index.aspx:

<div class="widget-title">Doctor Registration <span id="validationMessage" runat="server" ></span></div> 
<div class="row doctorlist-form"> 
    <div class="col-md-6 bmargindiv1"> 
     <label for="doctorname" accesskey="N"><span class="required">*</span> Name</label> 
     <div class="col-md-2 padding-zero"> 
     <asp:DropDownList ID="txtdoctorprefix" name="doctorname" runat="server"> 
     <asp:ListItem Value="Dr." Selected="True" Text="Dr."></asp:ListItem> 
     <asp:ListItem Value="Mr." Text="Mr."></asp:ListItem> 
     <asp:ListItem Value="Mrs." Text="Mrs."></asp:ListItem> 
     </asp:DropDownList> 
     </div> 
     <div class="col-md-10 padding-zero"><asp:TextBox ID="txtDoctorName" runat="server" oninput="detectName('dName');" ></asp:TextBox></div> 
     <div class="clearfix"></div> 
    </div> 
    <div class="col-md-6 bmargindiv1"> 
     <label for="gender" accesskey="G"><span class="required">*</span> Gender</label> 
     <asp:DropDownList ID="txtGender" name="grnder" runat="server" onchange="selectGender('gender');"> 
     <asp:ListItem Text="Select your Gender" Selected="True"></asp:ListItem> 
     <asp:ListItem Text="Male" Value="male" ></asp:ListItem> 
     <asp:ListItem Text="Female" Value="female"></asp:ListItem> 
     </asp:DropDownList> 
    </div> 
    <div class="col-md-12 bmargindiv1"> 
     <asp:Button runat="server" Text="Submit" class="button" ID="doctorDetails" OnClick="doctorDetails_Click" /> 
    </div> 
</div> 
<script type="text/javascript"> 
    function detectName(nameid) { 
     var type = nameid; 
     console.log(type); 
     switch (type) { 
      case 'dName': 
       $('#<%=txtDoctorName.ClientID %>').css('border-color', '#e3e3e3'); 
       $('#<%=validationMessage.ClientID %>').empty(); 
       break; 
     } 
    } 
    function selectGender(type) { 
     var type = type; 
     switch (type) { 
      case 'gender': 
       $('#<%=txtGender.ClientID %>').css('border-color', '#e3e3e3'); 
       $('#<%=validationMessage.ClientID %>').empty(); 
       break; 
     } 
    } 
</script> 

index.aspx.cs:

protected void doctorDetails_Click(object sender, EventArgs e) 
{ 
    // Response.Write(txtDoctorName.Text.Trim().Length); 
    if (txtDoctorName.Text.Trim().Length == 0) 
    { 
     validationMessage.InnerText = "Name field can not be blank."; 
     validationMessage.Style.Add("color", "red"); 
     txtDoctorName.Focus(); 
     txtDoctorName.BorderColor = System.Drawing.Color.Red; 
     return; 
    } 
    if (txtGender.SelectedIndex==0) 
    { 
     validationMessage.InnerText = "Gender field can not be blank."; 
     validationMessage.Style.Add("color", "red"); 
     txtGender.Focus(); 
     txtGender.BorderColor = System.Drawing.Color.Red; 
     return; 
    } 
} 

Моя проблема в том, когда общее поле пустым, и я, нажав на подать кнопка появляется сообщение об ошибке, но в то же время, когда я вношу некоторый вклад в одно текстовое поле a и снова нажав кнопку отправки, оператор 1-го раза также выполняет вместе со вторым оператором if, который не должен происходить. В этом случае должен выполняться только второй оператор if. Пожалуйста, помогите мне решить эту проблему.

+0

Вы использовали отладчик для перехода через событие 'doctorDetails_Click'? также вы подумали об использовании 'IsNullOrEmpty' для проверки ввода поля txtDoctorName.Text – MethodMan

+0

@ MethodMan: я также тестировал с помощью' IsNullOrEmpty', но также была проблема. – satya

ответ

1

Я настоятельно рекомендую использовать элементы управления проверки ASP.NET. Например:

ASPX страница

<asp:ValidationSummary ID="vs" runat="server" ValidationGroup="Default" /> 

<asp:TextBox ID="txtDoctorName" runat="server" /> 

<asp:CustomValidator 
    ID="cv" 
    runat="server" 
    ControlToValidate="txtDoctorName" 
    ValidateEmptyText="true" 
    Text="*" 
    OnServerValidate="ValidateRequired" 
    ErrorMessage="Please enter a valid Doctor Name." 
    ValidationGroup="Default" /> 

код За

protected void SubmitOnClick(object sender, EventArgs e) 
{ 
    if (!Page.IsValid) return; 
    ... 
} 

protected void ValidateRequired(object source, ServerValidateEventArgs args) 
{ 
    args.IsValid = !string.IsNullOrEmpty(args.Value.Trim()); 
} 

ValidationSummary даст вам хороший список всех ошибок проверки, а не только один на один раз.

Если вы собираетесь продолжить с этим методом, чтобы зафиксировать красную рамку на первое текстовое поле не девается, то вам нужно сбросить цвет границы каждый раз, когда нажата кнопка:

protected void doctorDetails_Click(object sender, EventArgs e) 
{ 
    // Clear all properties each time the button is clicked 
    validationMessage.InnerText = string.Empty; 
    txtDoctorName.BorderColor = System.Drawing.Color.Black; 
    txtGender.BorderColor = System.Drawing.Color.Black; 

    if (txtDoctorName.Text.Trim().Length == 0) 
    { 
    ... 
} 

Вы можете запустить свой проект в режиме отладки (F5), поместить точку останова в методе doctorDetails_Click и выполнить с помощью F10, чтобы узнать больше о том, что происходит.

+0

@ GoatBreeder: я отлаживал свой код.для второго щелчка после ввода некоторого ввода в первое поле указатель не перемещается внутри первого оператора if, но я не могу знать, как выполняются внутренние свойства 1-го оператора if. – satya

+0

Я не уверен, что понимаю. Вы спрашиваете, как выполнить код в блоке «if (txtDoctorName.Text.Trim(). Length == 0)»? Если текст был введен в txtDoctorName, этот код не будет выполняться. Вам нужно оставить txtDoctorName пустым для выполнения этого кода. – StronglyTyped

+0

Да, вы правы. – satya

0

Поскольку вы устанавливаете цвет границы явно на элементе управления, который работает на сервере (runat), моя сильная догадка заключается в том, что ViewState сохраняет эти свойства.

Вы можете проверить, что поведение путем изменения кода, чтобы проверить на втором входе перед первым, вы можете увидеть, что красная граница остается на второй сейчас, пока (только) первый уже не прошел проверку

Я согласен с @GoatBreeder, что вы используете buitin validation controls,

Смежные вопросы