2011-02-07 9 views
6

Sto cercando di ottenere la convalida del client che funziona in MVC3 utilizzando le annotazioni dei dati. Ho guardato post simili incluso questo MVC3 Client side validation not working per la risposta.MVC3/Convalida client del rasoio Non attiva

Sto utilizzando un modello di dati EF. Ho creato una classe parziale come questa per le mie convalide.

[MetadataType(typeof(Post_Validation))] 
public partial class Post 
{ 

} 

public class Post_Validation 
{ 
    [Required(ErrorMessage = "Title is required")] 
    [StringLength(5, ErrorMessage = "Title may not be longer than 5 characters")] 
    public string Title { get; set; } 

    [Required(ErrorMessage = "Text is required")] 
    [DataType(DataType.MultilineText)] 
    public string Text { get; set; } 

    [Required(ErrorMessage = "Publish Date is required")] 
    [DataType(DataType.DateTime)] 
    public DateTime PublishDate { get; set; } 
} 

La mia pagina cshtml include quanto segue.

<h2>Create</h2> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Post</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Title) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Title) 
      @Html.ValidationMessageFor(model => model.Title) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Text) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Text) 
      @Html.ValidationMessageFor(model => model.Text) 
     </div> 
} 

Web Config:

<appSettings> 
<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

Disposizione:

<head> 
<title>@ViewBag.Title</title> 
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script> 

Così, il testo opere di annotazione multilinea e crea un'area di testo. Ma nessuna delle validazioni funziona dal lato client. Non so cosa potrei mancare. Qualche idea?? posso pubblicare più informazioni se necessario. Grazie!

+0

Ciao, questo potrebbe non essere più attivo, ma voglio solo chiederti come lo risolvi? Sto affrontando lo stesso identico problema qui, ma il mio non può ottenere la convalida per il campo di testo..qualche idea ?? Grazie ... – shennyL

risposta

4

1.) Prova ad aggiungere il seguente nella vista che si stanno convalidando

HtmlHelper.ClientValidationEnabled = true; 
HtmlHelper.UnobtrusiveJavaScriptEnabled = true; 

non ho trovato necessario modificare Web.config, quindi è possibile rimuovere

<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

Buona fortuna! Inoltre, provare a inserire un valore errato noto per verificare se la convalida del lato client viene attivata, l'annotazione richiesta non sembra essere sufficiente per visualizzare un messaggio per un input vuoto.

2.) Metti sotto gli script a tuo avviso, dovrebbe funzionare.

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 
+2

Questo funziona, MA il mio problema era che avevo le app in Views \ web.config, non nella root \ web.config. Non sono sicuro di come sono stati confusi, dato che il progetto di default li inserisce nella configurazione di root, ma mi ha buttato per un loop. –

-4

proveremo a dichiarare mediante pubblico oggetto:

public class Post_Validation 
{ 
    [Required(ErrorMessage = "Title is required")] 
    [StringLength(5, ErrorMessage = "Title may not be longer than 5 characters")] 
    public object Title { get; set; } 

    [Required(ErrorMessage = "Text is required")] 
    [DataType(DataType.MultilineText)] 
    public object Text { get; set; } 

    [Required(ErrorMessage = "Publish Date is required")] 
    [DataType(DataType.DateTime)] 
    public object PublishDate { get; set; } 
} 
Problemi correlati