2013-02-19 17 views
5

Mam go intensywnie badane i nie mogłem znaleźć odpowiedzi, więc zamieszczam to tutaj mając nadzieję na pomoc.Błędy sprawdzania poprawności w asp.net 4.5

Mamy projekt asp.net 4.5 z walidacją określoną w klasach obiektów bazy danych. Na przykład:

[Required(ErrorMessage = "Name is a required field.")] 
public string Name { get; set; } 

Czy jest jakiś sposób w ogóle, że możemy mieć ten komunikat o błędzie pojawi się obok pola na stronie formularza? Podsumowanie sprawdzania poprawności wygląda dobrze, ale chcielibyśmy, aby były wyświetlane obok odpowiednich pól bez używania tradycyjnych, obciążonych kodem walidatorów asp.net (RequiredFieldValidator i innych).

Dzięki za pomoc.

EDIT: używamy webforms, nie MVC

+2

Używasz webforms lub MVC? –

+0

Tak, napisałem odpowiedź, myśląc, że to MVC, ale wtedy nie byłem pewien, myślę, że on ma na myśli WebForms. –

+0

Zapomniałem wspomnieć, że tak, używamy formularzy internetowych. – user2085436

Odpowiedz

1

Niestety WebForms modelu wiążące ramy walidacji nie jest tak wszechstronny jak MVC jeszcze. Po pierwsze, sprawdzanie poprawności adnotacji po stronie klienta nie jest wbudowane. Jedynym sposobem, w jaki znam wyświetlanie błędów adnotacji danych, jest kontrola ValidationSummary, która ma właściwość ShowModelStateErrors (domyślnie jest to prawda). Tutaj jest bardzo prosty przykład:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:FormView ID="FormView" runat="server" RenderOuterTable="false" ItemType="Person" 
      DefaultMode="Insert" InsertMethod="FormView_InsertItem"> 
      <InsertItemTemplate> 
       <asp:ValidationSummary ID="ValSummary" runat="server" ValidationGroup="FormGroup" 
        HeaderText="The following problems occured when submitting the form:" /> 
       <table> 
        <tr> 
         <td> 
          <asp:Label ID="NameLabel" runat="server" AssociatedControlID="NameField">Name</asp:Label> 
         </td> 
         <td> 
          <asp:TextBox ID="NameField" runat="server" Text='<%# BindItem.Name %>' ValidationGroup="FormGroup" /> 
         </td> 
        </tr> 
       </table> 
       <asp:Button ID="SaveButton" runat="server" CommandName="Insert" Text="Save" ValidationGroup="FormGroup" /> 
      </InsertItemTemplate> 
     </asp:FormView> 
    </form> 
</body> 
</html> 

Code Behind:

public partial class create_person : System.Web.UI.Page 
{ 
    public void FormView_InsertItem() 
    { 
     var p = new Person(); 
     TryUpdateModel(p); 
     if (ModelState.IsValid) 
     { 
      Response.Write("Name: " + p.Name + "<hr />"); 
     } 
    } 
} 

Klasa:

using System.ComponentModel.DataAnnotations; 

public class Person 
{ 
    [Required, StringLength(50)] 
    public string Name { get; set; } 
} 

Ponieważ nie ma po stronie klienta/obsługa JavaScript walidacji adnotacji danych, jedynym sposobem generowania błędów stanu modelu jest po odświeżeniu. Jeśli potrzebujesz sprawdzania poprawności inline obok kontrolek, nadal potrzebujesz standardowych kontroli sprawdzania poprawności.

I napisali prośbę fabularny na głos użytkownika z prośbą o rozważenie zwiększenia integracji danych adnotacji: http://aspnet.uservoice.com/forums/41202-asp-net-web-forms/suggestions/3534773-include-client-side-validation-when-using-data-ann

Jeśli podoba Ci się pomysł proszę głosowania go na głos użytkownika. Mam nadzieję że to pomoże.

2

Można użyć formantu ModelErrorMessage. Na przykład, udawajmy, że masz model z własnością FirstName. byłoby dodać coś takiego:

<asp:ModelErrorMessage ID="FirstNameErrorMessage" ModelStateKey="FirstName" runat="server" /> 
Powiązane problemy