2011-07-07 4 views
0

Cela semble être une question fréquente pour de nombreuses raisons qui ne semblent pas semblent s'appliquer à cette situation. J'ai créé une page en utilisant ASP.NET MVC 2 et j'utilisais une vue fortement typée pour une classe générée à partir de la structure DataEnities.La validation côté client échoue lors du passage à viewmodel

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"  Inherits="System.Web.Mvc.ViewPage<MVC_EDI.Models.wysCustomerEndPoint>"" %> 

J'ai créé une classe de validation que j'ai liée à la classe de données.

[MetadataType(typeof(EndPointValidation))] 
public partial class wysCustomerEndPoint 
{   
} 

[Bind()] 
public class EndPointValidation 
{ 
    [Required(ErrorMessage = "Please enter the end point name")] 
    public string CustName { get; set; } 

Et j'ai été en mesure d'utiliser la validation côté client sur ma page de création. J'avais besoin d'ajouter une zone de liste déroulante sur la page de création, donc j'ai changé ma vue pour utiliser un viewmodel au lieu de la classe de données que j'utilisais.

public class CreateEditCustomerEndPointsViewModel 
{ 
    public wysCustomerEndPoint CustomerEndPoint {get; set;} 
    public List<SelectListItem> DefaultLocationList { get; set; } 
} 

et voici l'en-tête de vue utilisant le nouveau viewmodel.

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MVC_EDI.ViewModles.CreateEditCustomerEndPointsViewModel>" %> 

Mais maintenant, quand ce point de vue se charge que je reçois une erreur que mon formElement est nulle quand il essaie de définir une valeur? J'écris ici le fichier MicrosofyMvcValidation.js et le tableau formElement est nul. Je suppose que j'ai besoin d'ajouter une sorte d'annotation de données ou un attribut à mon modèle de vue ou quelque chose comme ça. Mais je ne suis pas sûr où? Et étonnamment, il semble bien fonctionner dans FireFox 5, mais des bombes dans IE9?

Modifier: merci pour la réponse. Oui, je crois que j'instancie l'objet avant de l'ajouter à ViewModel et d'utiliser les objets Html.Helper? Voici le code.

wysCustomerEndPoint ep = new wysCustomerEndPoint(); 
ep.BuyerID = id; 
var viewModel = new CreateEditCustomerEndPointsViewModel() 
{ 
    CustomerEndPoint = ep 
}; 
return View(viewModel); 

et dans la vue

<div class="editor-label"> 
    <%: Html.Label("Name") %> 
</div> 
<div class="editor-field"> 
    <%: Html.TextBoxFor(model => model.CustomerEndPoint.CustName) %> 
    <%: Html.ValidationMessageFor(model => model.CustomerEndPoint.CustName) %> 
</div> 

acclamations

bob

+0

Recherchez-vous model.isvalid? Voir les modèles de travail légèrement différent je suis d'accord, mais j'ai remarqué que forçant cette vérification sur le formulaire post vomi des erreurs ... – Haroon

+0

Non, je n'ai pas. Quand est-ce que je vérifierais cela? avant d'envoyer la vue, car la vue ne chargera même pas. –

+0

J'ai juste éclaté toutes les propriétés de wysCustomerEndPoint et les ai placées dans le modèle de vue et mappé entre le modèle de vue et wysCustomerEndPoint. Ça me semble un peu ringard, mais ça fonctionne. merci pour les suggestions. –

Répondre

0

Vous faites peut-être, mais sans voir les bits correspondants du code que je ne veux pas assumer . Assurez-vous donc d'instancier l'objet wysCustomerEndPoint et de l'envoyer à votre vue depuis la méthode Controller. En outre, vous utilisez les Helpers Html pour les éléments d'entrée sur lesquels vous validez. Par exemple.

Html.TextboxFor(model => model.wysCustomerEndPoint.CustName) 
Questions connexes