2015-02-06 17 views
7

Ho un'app MVC 5 e sto utilizzando le annotazioni di dati per fare la maggior parte della convalida. Una delle proprietà della mia classe si presenta così:MVC5 - Annotazioni dati - Non si verifica la convalida lato client?

[Required(ErrorMessage = "Please enter a business name")] 
[StringLength(80)] 
public string BusinessName { get; set; } 

La validazione sta lavorando, ma non sembra accadere nel browser, come ho pensato che dovrebbe. Sulla mia pagina ho un pulsante Salva. Se lascio il campo Affari Nome vuoto e fare clic su Salva, un post è fatto per un metodo di controllo che sembra, in parte, come segue:

[HttpPost] 
    public ActionResult Create(Advertiser advertiser, FormCollection collection, HttpPostedFileBase file) 
    { 
     // Before we do anything, let's check to make sure any validation that's already been done is clean. 
     if (!ModelState.IsValid) 
     { 
      return View(advertiser); 
     } 
    ... 
    ... 
} 

Quando viene eseguito questo metodo, lo stato modello è già impostata come non valida. Va bene perché non è valido perché il campo Nome attività è vuoto. Tuttavia, questa convalida non dovrebbe accadere nel client?

Il campo nel mio file .cshtml sembra (usando Bootstrap) come segue:

<div class="form-group"> 
    @Html.Label("Business Name", new { @class = "control-label col-md-3" }) 
    <div class="col-md-9"> 
     @Html.TextBoxFor(model => model.BusinessName, new { @class = "form-control", title = "", autofocus = true }) 
     @Html.ValidationMessageFor(model => model.BusinessName) 
    </div> 
</div> 

mio web.config è impostato correttamente come segue:

<appSettings> 
    <add key="webpages:Version" value="3.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
+0

Qual è il tuo markup cshtml? (il tuo punto di vista ... qual è il codice) –

+0

@Ahmedilyas - Ho modificato il mio post per aggiungere il markup. –

+0

possibile duplicato di [Convalida lato client MVC3 non funzionante] (http://stackoverflow.com/questions/4706174/mvc3-client-side-validation-not-working) –

risposta

10

ho trovato il mio problema. Nei miei BundleConfig.cs ho il seguente:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
       "~/Scripts/jquery-{version}.min.js", 
       "~/Scripts/jquery-ui-1.10.4.min.js", 
       "~/Scripts/jquery.base64.js" 
       )); 

    bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
       "~/Scripts/jquery.validate.min.js", 
       "~/Scripts/jquery.validate.unobtrusive.min.js" 
       )); 

Ma, ciò che non mi ero reso conto è che il fascio jqueryval non ottiene caricato nel file _Layout.cshtml per impostazione predefinita. Quindi ho dovuto aggiungerlo, come segue:

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/jqueryval") 
@Scripts.Render("~/bundles/bootstrap") 
@RenderSection("scripts", required: false) 

Una volta eseguito, funziona come dovrebbe. Ovviamente, questo farà sì che venga caricato per tutte le pagine. Questo potrebbe non essere desiderabile. In caso contrario, caricarlo separatamente in ogni pagina, se necessario.

Problemi correlati