2010-05-17 6 views
0

Salut là j'utilise xval pour la première fois, il semble bien fonctionner pour les champs obligatoires, Cependant, j'ai quelques problèmes tout d'abord, il ne semble pas valider les booléens et aussi le client la validation ne fonctionne pas pour moi, ce n'est pas un problème majeur pour moi, celui dont j'ai vraiment besoin est la propriété stringlength. Il semble faire quelque chose parce que le formulaire n'est pas affiché lorsque la longueur de la chaîne est dépassée, mais aucun message d'erreur n'est affiché à l'utilisateur qui n'est évidemment pas ce que je veux, quelqu'un a-t-il réussi à le faire?asp.net mvc xval validation

Mon modèle va comme ceci

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; 
namespace PitchPortal.Core 
{ 
    public class DocumentMetadata 
    { 

     //[Required] 
     // public bool visibility { get; set; } 


     [Required,StringLength(10, ErrorMessage = "title is too long")] 
     public string title { get; set; } 

     [Required, StringLength(10, ErrorMessage = "description is too long")]  
     public string description { get; set; } 

     [Required, StringLength(10, ErrorMessage = "summary is too long")]  
     public string summary { get; set; } 

    } 
} 

le code html va comme ceci

<div id="results" title="Upload results"/> 
    <form id="myForm" action="<%=Url.Action("New") %>" method="post" enctype="multipart/form-data"> 
    <% Html.EnableClientValidation(); %> 

    <%= Html.ValidationSummary() %> 
    <table> 
     <tr> 
       <td> <%=Html.Label("File")%></td> 
       <td> 
        <input type="file" id="file1" name="fileUpload" /> <br /> 
        <%=Html.SubmitButton<DocumentController>(x => x.Upload(), "GetImage", "")%> 
       </td> 
       <td> 
        <%=Html.ValidationMessage("file1")%> 
       </td> 
     </tr> 
     <tr> 
       <td> <%=Html.Label("Visible")%></td> 
       <td> 
        <%= Html.RadioButton("visibility",true,true) %>true 
        <%= Html.RadioButton("visibility", false)%>false 
       </td> 
       <td> 
        <%= Html.ValidationMessage("visibility")%> 
       </td> 

     </tr> 
     <tr> 
       <td> <%=Html.Label("Title")%></td> 
       <td> <%=Html.TextBox("doc.title")%></td>   
       <td> <%= Html.ValidationMessage("doc.title")%></td> 
     </tr> 
     <tr> 
       <td> <%=Html.Label("Description")%></td> 
       <td><%= Html.TextArea("doc.description")%></td> 
       <td><%= Html.ValidationMessage("doc.description")%></td> 
     </tr> 
     <tr> 
       <td> <%=Html.Label("Summary")%></td> 
       <td> <%= Html.TextArea("doc.summary")%></td> 
       <td> <%= Html.ValidationMessage("doc.summary")%></td> 
     </tr> 
     <tr> 
       <td> <%=Html.Label("Filetype")%></td> 
       <td> <%= Html.DropDownList("Filetype_id", (IEnumerable<SelectListItem>)ViewData.Model.AllFiletypesList)%> </td> 

       <td> <%= Html.ValidationMessage("doc.Filetype_id")%> </td> 
     </tr> 
     <tr> 
       <td> <%=Html.Label("Category")%></td> 
       <td><%= Html.DropDownList("cat.parent_id", (IEnumerable<SelectListItem>)ViewData.Model.AllCategoriesList, "-please select item-", new { className = "unselected" })%> </td> 
      <td><%= Html.ValidationMessage("cat.parent_id")%> </td> 
     </tr> 

     <% 
      if (Session["TempFolder"] == null)  
      { 
       for (int i = 1; i < 6; i++) 
       { %> 
        <tr> 
         <td> <%=Html.Label("Shot "+i.ToString()) %> </td> 
         <td><input type="file" id="image_<%= i.ToString() %>" name="image_<%= i.ToString() %>" /></td> 
        </tr> 
     <%  } 
      }%> 

     <tr> 
       <td><input type="submit" value="save"/></td> 
     </tr> 
</table> 
</form>  
</div> 

Le code de la classe partielle est ici

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Data.Linq; 
using System.Web; 
using System.IO; 
using System.Configuration; 
using xVal.ServerSide; 
using System.Web.Mvc; 
using PitchPortal.Core.Repositories; 
using System.Web.Script.Serialization; 
using System.ComponentModel.DataAnnotations; 
using PitchPortal.Core.Extensions; 
namespace PitchPortal.Core 
{ 
    [MetadataType(typeof(DocumentMetadata))] 

    public partial class Document : IPostedFile 
    { 

     IRepository<FileType> IFiletypeRepository = new Repository<FileType>(new DataContextProvider(new ConnectionStringProvider(ConfigurationManager.AppSettings["ConnectionString"]))); 
     static ILoggingService logger = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<ILoggingService>(); 


     public int DownloadCounter 
     { 
      get 
      { 
       return this.Downloads1.Count; 
      } 
     } 

     [ScriptIgnore] 
     public bool IsNewDocument 
     { 
      get { return this.document_id<1; } 
     } 


     public string clientClassPath 
     { 
      get { return "DocumentVO"; } 
     } 

     public string VersionGuid 
     { 
      get; 
      set; 
     } 

     [ScriptIgnore] 
     public virtual HttpPostedFileBase PostedFile 
     { 
      get; 
      set; 
     } 
     [ScriptIgnore] 
     public string BasePath 
     { 


      get 
      { 


       return PathExtensions.Build(new string[] { ConfigurationManager.AppSettings["Root"], Category1.GetFamilyTreePath(), title }); 


      } 


     } 




    } 


} 

Répondre

0

Vous avez oublié de mettre:

et de mettre votre <%= Html.ValidationSummary() %> bettween tags <div id="validationsummary">and </div>

+0

Merci Grégoire, qui a travaillé pour la validation du côté client (Merci beaucoup, vous ne savez pas combien cela signifie pour moi) mais ne trie pas tout à fait de la question de stringlength, je comprends qu'il était pas destiné à. Connaissez-vous des correctifs pour cela? – mctayl

+0

Pouvez-vous poster votre code de classe de document? – Gregoire

+0

J'utilise Linq et un binôme/classe de métadonnées, C'est la classe que j'ai posté plus tôt. Merci – mctayl