Domanda

Non riesco a xVal convalida di lavorare con ViewModel fortemente tipizzati.

Ogni metodo xVal sembra voler un prefisso che non viene utilizzato quando si tratta di ViewModel fortemente tipizzati.

La mia opinione contiene il codice simile al seguente:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<ContactForm>" %>
<%= Html.TextBox("firstName", Model.FirstName) %>

E il codice seguente va nel controller:

try
{
    var theModel = form.ToModel();
    _contactRepository.Save(theModel);
}
catch (RulesException ex)
{
    ex.AddModelStateErrors(ModelState, string.Empty); // Passing string.Empty for prefix, since I don't use prefixes.
}

return View(form);

Tuttavia, il codice di cui sopra non funziona. Ho sicuramente perso qualcosa, ma non so cosa. Questa è la mia prima volta con xVal.

grato per qualsiasi aiuto!

È stato utile?

Soluzione

Credo che il problema sta nel fatto che non si utilizza prefissi. Se si esegue il debug ModelState è possibile vedere le convalide per cose come ".FirstName" anche se dovrebbero essere come 'Nome'. A causa di ciò il cliente sintesi validazione lato e roba non mostra i messaggi di errore di convalida.

Credo che questo sia un bug in xVal.

Altri suggerimenti

Per il punto di Adrian, non possiamo vedere se si sta utilizzando DataAnnotations del modello di vista, o se si utilizza qualsiasi tipo di corridore descritto in questo articolo . Avrete bisogno di usare un qualcosa di simile al DataAnnotationsValidationRunner accenna ad eseguire la convalida su ogni proprietà del modello vista, come specificato dalla convalida attributi si utilizza (ad esempio, richiesto, gamma, ecc.).

In sostanza i passi sarebbero:

  1. Recupera la tua vista aggiornata del modello fortemente tipizzato dal modulo.
  2. Far passare la modella alla DataAnnotationsValidationRunner, la raccolta di eventuali errori che si traducono
  3. Se non ci fossero errori (oggetti ErrorInfo), buttarli come RulesException
  4. Cattura la RulesException e aggiungere le eccezioni di convalida per il vostro modello utilizzando il metodo del AddModelStateErrors eccezione
  5. Verificare se ModelState.IsValid, e se non lo è, rappresentano la vostra vista, che grazie alla vostra gestione delle eccezioni avranno ora gli errori legati al modello di vista. Dovrete fare in modo di avere le chiamate di supporto ValidationMessage HTML appropriato in atto, fa riferimento anche dal articolo collegato.

Il tuo annuncio a non abbastanza conciso per me di capire che cosa sta andando male, ma si può trovare un sito web demo completamente funzionante alla fine di questo articolo del blog . Viene inoltre descritto tutto ciò che dovete fare, passo dopo passo, quindi questo dovrebbe aiutare a ottenere xVal esecuzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top