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