2010-10-14 16 views
0

J'ai lu ce qui suit: http://weblogs.asp.net/imranbaloch/archive/2010/08/23/asp-net-mvc-jquery-validation-and-validationsummary.aspxMVC2/validation Jquery Questions

http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

Et ne peut toujours pas obtenir la validation jQuery pour travailler avec MVC2. Je peux obtenir un fonctionnement non jQuery mais quand je change les fichiers JS, cela ne fonctionne pas. Ça se passe le jour 3 et je suis complètement bloqué à ce point. Alors voici ce que j'ai. J'apprécie ton aide.

Site.master

<script src="<%= this.ResolveClientUrl("~/Resources/js/jquery-1.4.1.js") %>" 
     type="text/javascript"></script> 
    <script src="<%= this.ResolveClientUrl("~/Resources/js/jquery.validate.js") %>" 
     type="text/javascript"></script> 
    <script src="<%= this.ResolveClientUrl("~/Resources/js/MicrosoftMvcJqueryValidation.js") %>" 
     type="text/javascript"></script> 

    <script src="<%= this.ResolveClientUrl("~/Resources/js/ourJS--VERSION--.js") %>" type="text/javascript"></script> 
    <script src="<%= this.ResolveClientUrl("~/Resources/js/json2.js") %>" type="text/javascript"></script> 
    <link href="../../Resources/css/ourCSS--VERSION--.css" rel="stylesheet" type="text/css" /> 

ViewModel:

namespace OurNamespace 
{ 
    [ExcludeFromCodeCoverage] 
    public class OurDataModelView : PersistedDataModelView 
    { 
     public OurModelView() : base() 
     { 
      ID = -1; 
      StartDate = DateTime.MinValue; 
      EndDate = DateTime.MinValue; 
      Description = string.Empty; 
      Deleted = false; 
     } 

     [DisplayFormat(DataFormatString = "{0:MM/yyyy}")] 
     public DateTime? StartDate { get; set; } 

     [DisplayFormat(DataFormatString = "{0:MM/yyyy}")] 
     public DateTime? EndDate { get; set; } 

     [Required(ErrorMessage="Description is required.")] 
     [StringLength(250000, ErrorMessage = "A maximum of 250000 characters are allowed")] 
     public string Description { get; set; } 

     public int? ID { get; set; } 

     public bool Deleted { get; set; } 
    } 
} 

page ASPX

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 
... 
<% Html.RenderAction(WebConstants.ACTION_DISPLAY_HEADER, WebConstants.CONTROLLER, new { id = ViewData["ID"] }); %> 
... 

notre vue partielle que la validation se fait sur:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<OurNameSpace.OurDataModelView>" %> 
... 
     <% Html.EnableClientValidation(); %> 
     <% using (Html.BeginForm("", "", FormMethod.Post , new { id = "HeaderForm", onSubmit="return false;"})) { %> 
     <%: Html.ValidationSummary(false, "validation failed") %> 
     <%: Html.HiddenFor(model => model.ID) %> 
     <div class="form-row"> 
      <div class="form-label">Description</div> 
      <div class="form-element"><%: Html.TextAreaFor(model => model.Description)%></div> 
      <div><%= Html.ValidationMessageFor(model => model.Description) %></div> 
     </div> 

     <div class="buttons"> 
      <input id="Save" type="submit" class="save-button" value="" /> 
      <div id="Cancel" class="cancel-button"></div> 
     </div> 

     <% } %> 
... 

* * SO par ne fonctionne pas ici est ce que je vois. la source de vue je vois:

//<![CDATA[ 
if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; } 
window.mvcClientValidationMetadata.push({"Fields":[{"FieldName":"Description","ReplaceValidationMessageContents":true,"ValidationMessageId":"Description_validationMessage","ValidationRules":[{"ErrorMessage":"A maximum of 250000 characters are allowed","ValidationParameters":{"minimumLength":0,"maximumLength":250000},"ValidationType":"stringLength"},{"ErrorMessage":"Description is required.","ValidationParameters":{},"ValidationType":"required"}]}],"FormId":"HeaderForm","ReplaceValidationSummary":true,"ValidationSummaryId":"validationSummary"}); 
//]]> 

Cependant, la validation côté client n'apparaît pas. Je clique sur le type de zone de texte dans un char et le supprime de l'élément et rien ne se passe. Des idées pour déboguer cela?

+0

J'ai fini par trouver le problème. Un des développeurs a fait une méthode JS qui convertirait nos modules sur la page en une structure div afin qu'il puisse aussi appliquer des styles. Cela a pris les modules enfants via une méthode .html() et l'a concaténée sur une chaîne avec la nouvelle structure. Bien sûr, cela a brisé toutes les liaisons de cet élément. Je finirai par poster comment j'ai débuggé ceci au cas où d'autres ont ce problème. –

Répondre

1

Voici un exemple de travail très simple:

Modèle:

public class MyViewModel 
{ 
    [Required(ErrorMessage = "Description is required.")] 
    [StringLength(10, ErrorMessage = "A maximum of 10 characters are allowed")] 
    public string Description { get; set; } 
} 

Controller:

[HandleError] 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel()); 
    } 
} 

Vue:

<script type="text/javascript" src="<%= Url.Content("~/scripts/jquery-1.4.1.js") %>"></script> 
<script type="text/javascript" src="<%= Url.Content("~/scripts/jquery.validate.js") %>"></script> 
<script type="text/javascript" src="<%= Url.Content("~/scripts/MicrosoftMvcJQueryValidation.js") %>"></script> 

<% Html.EnableClientValidation(); %> 

<% using (Html.BeginForm()) { %> 
    <%: Html.TextAreaFor(x => x.Description)%></div> 
    <%: Html.ValidationMessageFor(x => x.Description) %> 
    <input type="submit" value="OK" /> 
<% } %> 

Le MicrosoftMvcJQueryValidation.js n'est pas inclus i n le modèle de projet standard car il fait partie du MVC Futures project (l'extraire du code source). Une fois que vous avez mis cet exemple en action et que vous l'avez prouvé, vous pouvez commencer à ajouter des fonctionnalités.

+0

J'ai essayé de faire tout ça. Notre application est de mûrir maintenant pour tout arracher et le reconstruire .. bien trop loin cela signifie seulement en dernier recours, car il faudra une semaine pour faire correctement. Je fais un plongeon profond dans les fichiers MS et JQuery js aujourd'hui. Si cela ne rapporte pas grand-chose, nous abandonnerons tout simplement parce que nous n'avons pas besoin de temps pour architecturer une fonctionnalité qui sauve seulement du code/des erreurs en répétant du code en double. pour la quantité de temps que nous avons passé dessus, nous pourrions écrire deux fois les deux côtés. Merci quand même. –

+0

hummm peut-être que je peux le fixer beaucoup plus simple ..... je vous le ferai savoir. –