2015-12-15 3 views
0

У меня есть имя пользователя текстового поля с AutoPostBack собственности и RequiredFieldValidator .The проблемами, когда я что-то типа в текстовом поле, то выйти из него, таким образом, вызывая AutoPostBack теперь, если я вернусь в текстовом поле и удалить то, что Я набрал, а затем вышел из текстового поля. Форма отображает сообщение «Имя пользователя», но его просто мигает в течение секунды, а затем страница обновляется.
Я не понимаю этого поведения. Могу ли я каким-либо образом изменить форму, чтобы либо сообщение «Имя пользователя было необходимо», либо оно вообще не мигает. И если я выхожу из текстового поля без не вводить ничего не происходит (даже не AutoPostBack я думаю)
Другая проблема такая же, но я думаю, что мои сомнения немного отличается:
Почему RequiredFieldValidator не уволен, если текст поле пусто и я нажимаю вкладку или что на самом деле срабатывает RequiredFieldValidator
Если RequiredFieldValidator недействительно, почему AutoPostBack все еще происходит, разве валидаторы не проверялись ранее в жизненном цикле страницы?
AutoPostBack и RequiredFieldValidator поведение

using System; 
using System.Data; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Configuration; 

namespace Registration_LoginPortel 
{ 
public partial class RegistrationPage : System.Web.UI.Page 
{ 
    int i = 0; 
    protected void Page_Load(object sender, EventArgs e) 
    { 



    } 
    protected void SubmitButton_Click(object sender, EventArgs e) 
    { 
     lblLoginAvailable.Visible = false; 
     Response.Write("PPpostback" + (++i)); 
     if (!CheckLogin(Usn.Text.ToString().Trim())) 
     { 
      //Register the user 
      try 
      { 
       SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 
       con.Open(); string s = Usn.Text; 
       string sql_insertQuery = "INSERT INTO UserData(username,password,country)values (@UName,@UPass,@UCountry)"; 
       //string sql_insertQuery = "INSERT into UserData(username,password,country) VALUES ('"+Usn.Text+"','"+pass.Text+"','"+country.Text+"')"; 
       SqlCommand com = new SqlCommand(sql_insertQuery, con); 
       com.Parameters.AddWithValue("@UName", Usn.Text); 
       com.Parameters.AddWithValue("@UPass", pass.Text); 
       com.Parameters.AddWithValue("@UCountry", country.Text); 

       com.ExecuteNonQuery(); 
       // Response.Redirect("Admin.aspx"); 
       Response.Write("Registration is successfull"); 
       con.Close(); 
      } 
      catch (Exception ex) 
      { 
       //Response.Write("Error : " + ex.Message); 
       Response.Write("\n\nError : " + ex.ToString()); 
      } 
     } 
     else 
     { 
      lblLoginAvailable.Visible = true; 
      lblLoginAvailable.Text = "This login already exists in our system. Chooce another login please"; 
     } 
    } 
    protected bool CheckLogin(string login) 
    { 
     SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 
     SqlCommand cmd = new SqlCommand("select count(*) from UserData where lower(username) = lower(@login)", con); 
     cmd.Parameters.Add("@login", SqlDbType.VarChar).Value = login; 
     string id = ""; 
     try 
     { 
      con.Open(); 
      id = (int)cmd.ExecuteScalar() == 0 ? "" : cmd.ExecuteScalar().ToString(); 
     } 
     catch (Exception ex) 
     { 
      //... 
     } 
     finally 
     { 
      con.Close(); 
     } 
     if (String.IsNullOrEmpty(id)) return false; 
     return true; 
    } 


    protected void Usn_TextChanged(object sender, EventArgs e) 
    { 
     lblLoginAvailable.Visible = false; 

    } 

} 

}

+1

Возможного дубликату [Stop постбэк на TextChanged] (http://stackoverflow.com/questions/1524492/stop-postback-on-textchanged) – MethodMan

+0

@MethodMan: Edited моего вопрос –

+0

Http: //stackoverflow.com/questions/3915994/asp-net-required-field-validator-for-at-least-one-textbox-contains-text использовать Google для примеров .. также, так как вы не публикуете свой .aspx, это будет трудно для кого-либо определить, где вы делаете свою ошибку. – MethodMan

ответ

0

вы можете просто удалить RequiredFieldValidator, и код вашей кнопки будет:

<asp:Button ID="btnSubmit" runat="server" OnClientClick="return checkvalue();" OnClick="Button_Click" /> 

checkvalue() является Java-метод, с помощью которого вы будете проверять значение вашего TextBox в.

<script type="text/javascript"> 
    function checkvalue(){ 
     var txt = document.getElementById("yourTextboxId"); 
     if (txt.value.length == 0){ 
      alert('Insert a data'); 
      txt.focus(); 
      return false; 
     } 
     return true; 
    } 
</script> 

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

Надеется, что это помогает

+0

спасибо за все ответы, он работает так же, как я хочу. –

+0

@abhishekjaiswal Добро пожаловать! Отправьте ваши вопросы, если вам нужно. Мы постараемся вам помочь. – Khazratbek

0

Страница размещения назад, так что вернуться к серверу, и это своего рода борьбу с RequiredFieldValidator. В фоновом режиме ваш RequiredFieldValidator передает Javascript на страницу, которая затем делает свою магию и проверяет, нужно ли отображать сообщение. Когда событие postback запускается, он публикует всю страницу назад и на ее возврате перезагружает страницу, тем самым теряя сообщение jscript в пользовательском интерфейсе.

Я бы порекомендовал не иметь автозапуск для чего-то подобного, поскольку он накладывает ненужную нагрузку на сервер. Что именно вы хотите, чтобы это мероприятие?

+0

Я просто думал, что предположим, когда я надаю на подачу и получаю что-то вроде «Username exists», а затем даже если я изменил имя пользователя, сообщение об ошибке останется там до тех пор, пока я не нажму кнопку повторно отправьте кнопку. Мне нравится говорить, что «имя пользователя существует» на экране, когда оно на самом деле это не делает. Это создаст путаницу для очень начинающего пользователя, который делает вещи в первый раз и особенно для моей целевой аудитории. –

+1

Я бы, вероятно, избегал информирования пользователей о том, когда существуют учетные записи, это может быть форма утечки данных и может считаться менее надежной, если потенциальный хакер знает половину учетных данных, необходимых для взлома.В стороне я удаляю событие postback и позволяю Javascript выполнять работу по проверке. Обязательный полевой валидатор должен остановить отправку сообщения об отправке сообщения, предполагая, что вы правильно его подключили. Установите autopostback в false (или удалите его), а затем посмотрите, работает ли он. –

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