Ho creato una vista parziale in un'applicazione MVC 3. Questo punto di vista ha un modello fortemente tipizzato come questo:ASP.NET MVC PartialView non emette il markup di convalida
public class ProductViewModel
{
[Required, Display(Name = "Product price")]
public decimal? ProductPrice
{
get;
set;
} ...
}
Nel mio metodo di azione invoco il metodo PartialView come questo
PartialView("ProductViewModel", products[0]);
Ma sulla pagina non riesco a vedere nessun marcatore per la logica di convalida e comunque non succede niente se ci sono errori nella pagina. Se utilizzo questa vista parziale come modello di editor, funziona. Qualsiasi aiuto è apprezzato.
Modifica: per essere più specifico, ho un modulo HTML e voglio aggiungere markup ad esso tramite un aggiornamento Ajax (se l'utente fa clic su un pulsante, voglio aggiungere un nuovo markup a tale modulo). Se includo questi controlli staticamente, voglio dire che se li renderizzo quando la pagina viene caricata, la validazione funziona, ma se aggiungo controlli a quel modulo con una chiamata Ajax, per questi controlli non viene inserito alcun markup di convalida. La mia vista parziale simile a questa:
@Html.LabelFor(x => x.ProductPrice)
@Html.TextBoxFor(x => x.ProductPrice)
@Html.ValidationMessageFor(x => x.ProductPrice)
La mia forma è simile al seguente:
@using (Html.BeginForm())
{
<div id="div_Products">
@Html.EditorFor(x => x)
</div>
<input type="submit" value="Compare" />
}
Il codice sopra funziona bene, la convalida funziona. Sul lato server invoco un metodo di azione che assomiglia:
[HttpPost]
public ActionResult InsertProduct()
{
var newProductVM = new ProductViewModel{ ProductPrice = 789 };
return PartialView("~/Views/Nutrition/EditorTemplates/ProductViewModel.cshtml", newProductVM);
}
ho capito che il motore MVC inserisce quelli Markup Validation solo se rileva che i controlli sono all'interno di un controllo di modulo. Quando provo ad aggiornare il controllo del mio modulo tramite una chiamata ajax, MVC non ha modo di sapere che saranno posizionati all'interno di un elemento del modulo ed è per questo che non emette alcuna logica di convalida per loro, suppongo.
Ha senso che un editor "emetta" errori di convalida e così, e che una vista non lo fa. Possiamo vedere il codice per la tua vista? – rfmodulator
Il problema è che MVC inserisce il markup di convalida solo se rileva che i controlli si trovano all'interno di un modulo. Il problema è che voglio aggiungere markup a un controllo di modulo tramite l'aggiornamento ajax, ma in questo modo il motore MVC non sa che questo markup verrà inserito in un elemento form e quindi non emetterà alcun markup di convalida. – Zoliqa
È possibile forzarlo con un codice Html.ValidationMessageFor(). Come ho detto, mostraci il tuo punto di vista per favore. – rfmodulator