asp.net mvc xval 验证

发布于 2024-09-02 01:33:13 字数 6156 浏览 10 评论 0原文

您好,我第一次使用 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 });


            }


        } 




    }


}

Hi there I am using xval for the first time, it seems to work fine for required fields,
However I am having some issues
first of all it does not seem to validate booleans and also client validation is not working for me, this is not a major issue for me, the one that I really need to work is the stringlength property. It seems to do something because the form is not posted when the string length is exceeded, however no error message is displayed to the user which is obviously not what I want, has anyone been able to do this successfully?

My model goes like this

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

    }
}

the html goes like this

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

The code for the partial class is here

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


            }


        } 




    }


}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

Oo萌小芽oO 2024-09-09 01:33:13

您忘记输入:

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

并输入 <%= Html.ValidationSummary() %>;标签

之间

You forgot to put:

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

and to put your <%= Html.ValidationSummary() %> bettween tags <div id="validationsummary">and </div>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文