проверка asp.net mvc xval

Привет, я впервые использую xval, похоже, он отлично работает для обязательных полей, однако у меня есть некоторые проблемы, прежде всего, он не проверяет логические значения, а также проверка клиента не работает для меня, это не Основная проблема для меня, то, что мне действительно нужно для работы, - это свойство stringlength. Кажется, что-то происходит, потому что форма не отправляется, когда длина строки превышена, однако пользователю не отображается сообщение об ошибке, что, очевидно, не то, что я хочу, смог ли кто-нибудь сделать это успешно?

Моя модель выглядит так

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; }

    }
}

HTML выглядит так

<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>

Код для частичного класса здесь

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 });


            }


        } 




    }


}

person mctayl    schedule 17.05.2010    source источник


Ответы (1)


Вы забыли поставить:

<%= Html.ClientSideValidation("doc", typeof(Document))
        .UseValidationSummary("validationSummary") %>

и поставить свой <%= Html.ValidationSummary() %> bettween tags <div id="validationsummary">and </div>

person Gregoire    schedule 17.05.2010
comment
Спасибо, Грегуар, это сработало для проверки на стороне клиента (большое спасибо, вы не знаете, насколько это для меня значит), но не совсем касается проблемы длины строки, я понимаю, что это не предназначалось. Вы знаете какие-нибудь исправления для этого? - person mctayl; 17.05.2010
comment
Я использую Linq и класс друзей / метаданных. Это класс, который я опубликовал ранее. Спасибо - person mctayl; 17.05.2010
comment
Я также опубликовал частичный класс, расширяющий сгенерированный класс linq - person mctayl; 17.05.2010
comment
Я плохо понимаю вашу проблему с длиной строки, ваша проблема в клиенте или на стороне сервера? Если он находится на стороне сервера, вам необходимо иметь функцию, которая проверяет ваш объект, проверяет DataValidationRunner на этой странице: blog.stevensanderson.com/category/xval/page/2 - person Gregoire; 17.05.2010
comment
Спасибо за ваш ответ. Должно быть, это моя ошибка, я думал, что StringLength и Range работают из коробки, не знал, что для этого вам нужно написать код в классе модели. Правильно ли я предполагаю это? В идеале я хочу, чтобы он работал как на стороне клиента, так и на стороне сервера, бит-серверная сторона важнее - person mctayl; 17.05.2010
comment
Я проверю строчку, надеюсь, она прольет свет. Кстати большое спасибо - person mctayl; 17.05.2010
comment
Вы правы, вы должны сами применить валидацию на стороне сервера. В MVC версии 2.0 вы можете использовать Model.IsValid в своем контроллере. - person Gregoire; 17.05.2010