This question is locked. New answers and comments are not allowed.
I have an Integer property on my Model that is rendered using the standard Integer EditorTemplate provided with the Telerik MV Extensions. I am also using the RangeAttribute DataAnnotation to specify my validation criteria for the range that I want to allow (in this case it is 0 to 100). However, no matter what my values are, the validation always throws an error. Is this a known bug?
My code is quite straight forward. The Model class is as follows:
Please pay specific attention to the ExpiryMonths property.
My View is pretty much the same as the MVC Grid Ajax Editing example with a few customisations:
And finally, my CourseDTO editor template:
Sorry. Lots of code for a small problem. However, it is quite annoying when you feel you have finally found an effective and workable approach and then you are snared by one small issue that leaves a gaping hole in your form.
Any help will be appreciated.
My code is quite straight forward. The Model class is as follows:
public class CourseDTO{ public int Id { get; set; } [Required(ErrorMessage="Course Title is required.")] [DisplayName("Course Title:")] public string Title { get; set; } [DisplayName("Description:")] [DataType(DataType.MultilineText)] public string Description { get; set; } public string CompletionCategory { get; set; } public int ReminderId { get; set; } [RangeAttribute(0, 100, ErrorMessage="Expiry Months must be between 0 and 100")] [DataType("Integer")] [DisplayName("Expiry Months:")] public int ExpiryMonths { get; set; } [ScaffoldColumn(false)] public bool Deleted { get; set; } [ScaffoldColumn(false)] public IList<ScheduledCourseDTO> ScheduledCourses { get; set; } public CourseDTO() { ScheduledCourses = new List<ScheduledCourseDTO>(); }}Please pay specific attention to the ExpiryMonths property.
My View is pretty much the same as the MVC Grid Ajax Editing example with a few customisations:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<List<Vigilaris.Booking.Services.CourseDTO>>" %><asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"><style type="text/css"> .field-validation-error { position: relative; display: block; } * html .field-validation-error { position: relative; } *+html .field-validation-error { position: relative; } .field-validation-error span { position: relative; left: 200px; top: 10px; white-space: nowrap; color: red; padding: 17px 5px 3px; background: transparent url('<%= Url.Content("~/Content/Themes/Shared/images/bg_validation-msg.png") %>') no-repeat 0 0; } .t-widget .t-numerictextbox { width: 100px !important; min-width: 100px !important; padding-left: 4px; }</style> <!-- Setup the grid --> <% Html.Telerik().Grid<Vigilaris.Booking.Services.CourseDTO>() .Name("CoursesGrid") .ToolBar(commands => commands.Insert().ButtonType(GridButtonType.Image).ImageHtmlAttributes(new { style = "margin-left:0" })) .Columns(columns => { columns.Bound(c => c.Id).Width(20); columns.Bound(c => c.Title).Width(300); columns.Bound(c => c.CompletionCategory).Width(100); columns.Bound(c => c.ExpiryMonths).Width(35); columns.Command(commands => { commands.Edit().ButtonType(GridButtonType.Image); commands.Delete().ButtonType(GridButtonType.Image); }).Width(180).Title("Commands"); }) .DataKeys(keys => keys.Add(c => c.Id)) .DataBinding(dataBinding => dataBinding.Ajax() .Select("_IndexAjax", "Course") .Insert("_InsertAjax", "Course") .Update("_UpdateAjax", "Course") .Delete("_DeleteAjax", "Course") ) .Editable(editing => editing.Mode(GridEditMode.InForm)) .Sortable() .Render(); %></asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="PageTitle" runat="server"> Courses</asp:Content><asp:Content ID="Content3" ContentPlaceHolderID="IntroContent" runat="server"> A list of courses that have been or will be used for instructor led training at various training sites.</asp:Content>And finally, my CourseDTO editor template:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Vigilaris.Booking.Services.CourseDTO>" %><div> <fieldset class="editfieldset"> <legend class="titlelegend">Course Details</legend> <ol> <li> <%: Html.LabelFor(model => model.Title) %> <%: Html.TextBoxFor(model => model.Title) %> <%: Html.ValidationMessageFor(model => model.Title, "*") %> </li> <li> <%: Html.LabelFor(model => model.Description) %> <%: Html.TextAreaFor(model => model.Description) %> <%: Html.ValidationMessageFor(model => model.Description) %> </li> <li> <%: Html.LabelFor(model => model.ExpiryMonths) %> <%: Html.EditorFor(model => model.ExpiryMonths) %> <%: Html.ValidationMessageFor(model => model.ExpiryMonths) %> </li> </ol> </fieldset></div>Sorry. Lots of code for a small problem. However, it is quite annoying when you feel you have finally found an effective and workable approach and then you are snared by one small issue that leaves a gaping hole in your form.
Any help will be appreciated.