asp.net RequiredFieldValidator

У меня проблема. У меня есть регистрация и некоторые элементы управления RequiredFieldValidator.

Проблема:

Если я оставлю текстовое поле пустым, я увижу сообщение об ошибке. Но он записывает значения в мою базу данных. я хочу, чтобы он остановился, а не записывал значения в мою БД.

Большое тебе спасибо!

Кевин

Aspx

<tr>
    <td id="LabelBenutzername" class="auto-style2">Benutzername</td>
    <td>
        <asp:TextBox ID="TextBoxRBenutzername" runat="server"></asp:TextBox>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" 
            runat="server" ControlToValidate="TextBoxRBenutzername" 
            ErrorMessage="Bitte einen Benutzernamen eingeben" ForeColor="Red">
        </asp:RequiredFieldValidator>
    </td>
</tr>

Код программной части

if (IsPostBack)
        {

            SqlCommand cmd = new SqlCommand("select * from tabUser where Benutzername = @Benutzername", con);
            SqlParameter param = new SqlParameter();
            param.ParameterName = "@Benutzername";
            param.Value = TextBoxRBenutzername.Text;
            cmd.Parameters.Add(param);
            con.Open();
            SqlDataReader reader = cmd.ExecuteReader();


            if (reader.HasRows)
            {
                Label1.Text = "User Id already exists";
                con.Close();
                return;
            }

            con.Close();

        }

        try
        {
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DBFitnessBlogConnectionString"].ToString());
            SqlCommand cmd = new SqlCommand();

            cmd.Connection = con; //assigning connection to command
            cmd.CommandType = CommandType.Text; //representing type of command
            //cmd.CommandText = "INSERT INTO UserDetails (Fname,Lname,Email,Password,Gender,Dob,Mobile,Address) values
            // (@Fname,@Lname,@Email,@Password,@Gender,@Dob,@Mobile,@Address)";
            cmd.CommandText = "INSERT INTO tabUser values(@Benutzername,@Passwort,@Vorname,@Nachname,@Email)";

            //adding parameters with value
            cmd.Parameters.AddWithValue("@Benutzername", TextBoxRBenutzername.Text.ToString());
            cmd.Parameters.AddWithValue("@Passwort", TextBoxRPasswort.Text.ToString());
            cmd.Parameters.AddWithValue("@Vorname", TextBoxRVorname.Text.ToString());
            cmd.Parameters.AddWithValue("@Nachname", TextBoxRNachname.Text.ToString());
            cmd.Parameters.AddWithValue("@Email", TextBoxREmail.Text.ToString());
            con.Open(); //opening connection
            cmd.ExecuteNonQuery();  //executing query
            con.Close(); //closing connection
            Label1.Text = "Registration erfolgreich..";

        }
        catch (Exception ex)
        {
            Label1.Text = "Registration erfolgreich NICHT..";
        }

    }

person user3070725    schedule 10.12.2013    source источник
comment
Пожалуйста, опубликуйте код программной части.   -  person Karl Anderson    schedule 10.12.2013
comment
Судя по всему, вы отправляете сообщение независимо от ошибки. Вы должны убедиться, что ваши кнопки не имеют CausesValidation="false"   -  person Daniel    schedule 10.12.2013
comment
И логика отправки со стороны клиента, или она сгенерирована автоматически?   -  person Bruno Costa    schedule 10.12.2013


Ответы (4)


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

if(Page.IsValid)
{
    // Do database logic here
}
person Karl Anderson    schedule 10.12.2013

Быстрый ответ: в файле кода программной части напишите в событии, чтобы проверить его на предмет проверки, прежде чем приступить к обновлению базы данных.

    protected void btnUpdateSettings_Click(object sender, EventArgs e)
    {
        if (IsValid)
        {
            // Event Programming Code Goes Here
        }
    }

Идея заключалась бы в том, что если бы какие-либо элементы управления активировали элементы управления проверки, то форма могла бы выполнить обратную передачу, но тогда не было бы выполнения кода.

person Scott Perry    schedule 10.12.2013

Перед тем, как обратиться к базе данных для обновления данных, проверьте

Page.IsValid == true

прежде чем вы сделаете свое обновление.

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

person Tim    schedule 10.12.2013

Я не вижу вашей кнопки отправки. Но я использовал ваш код, чтобы показать вам, как я делаю свой. Похоже, вам не хватает ValidationGroup в обоих элементах управления.

<tr>
   <td id="LabelBenutzername" class="auto-style2">Benutzername</td>
   <td>
       <asp:TextBox ID="TextBoxRBenutzername" runat="server"></asp:TextBox>
       <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBoxRBenutzername" ValidationGroup="Insert" ErrorMessage="Bitte einen Benutzernamen eingeben" ForeColor="Red"></asp:RequiredFieldValidator>
       <asp:Button ID="btnSubmit" runat="server" Text="Submit" Font-Size="Smaller" Height="29px" OnClick="btnSubmit_Click" Width="59px" ValidationGroup="Insert" CausesValidation="true" />
   </td>
</tr>

Надеюсь, это поможет.

Обратите внимание, что вы также можете использовать сводку проверки.

person Humpy    schedule 10.12.2013