2012-09-18 58 views
1

我想驗證生日選擇部分的日期字段。我有一個1-31天下拉列表,默認值爲「0」,文本爲「日」。代碼如下:ASP.NET MVC 3如何驗證下拉列表

public IEnumerable<SelectListItems> Date = new List<SelectListItems> 
    { 
     new SelectListItems{Value = "0", Text = "Day", Default = true}, 
     new SelectListItems{Value = "1", Text = "1"}, 
     new SelectListItems{Value = "2", Text = "2"}, 
     new SelectListItems{Value = "3", Text = "3"}, 
     new SelectListItems{Value = "4", Text = "4"}, 
     new SelectListItems{Value = "5", Text = "5"}, 
     new SelectListItems{Value = "6", Text = "6"}, 
     new SelectListItems{Value = "7", Text = "7"}, 
     new SelectListItems{Value = "8", Text = "8"}, 
     new SelectListItems{Value = "9", Text = "9"}, 
     new SelectListItems{Value = "10", Text = "10"}, 
     new SelectListItems{Value = "11", Text = "11"}, 
     new SelectListItems{Value = "12", Text = "12"}, 
     new SelectListItems{Value = "13", Text = "13"}, 
     new SelectListItems{Value = "14", Text = "14"}, 
     new SelectListItems{Value = "15", Text = "15"}, 
     new SelectListItems{Value = "16", Text = "16"}, 
     new SelectListItems{Value = "17", Text = "17"}, 
     new SelectListItems{Value = "18", Text = "18"}, 
     new SelectListItems{Value = "19", Text = "19"}, 
     new SelectListItems{Value = "20", Text = "20"}, 
     new SelectListItems{Value = "21", Text = "21"}, 
     new SelectListItems{Value = "22", Text = "22"}, 
     new SelectListItems{Value = "23", Text = "23"}, 
     new SelectListItems{Value = "24", Text = "24"}, 
     new SelectListItems{Value = "25", Text = "25"}, 
     new SelectListItems{Value = "26", Text = "26"}, 
     new SelectListItems{Value = "27", Text = "27"}, 
     new SelectListItems{Value = "28", Text = "28"}, 
     new SelectListItems{Value = "29", Text = "29"}, 
     new SelectListItems{Value = "30", Text = "30"}, 
     new SelectListItems{Value = "31", Text = "31"} 

    }; 

我的模型如下:

public class PaxInfoViewModel 
{ 
    public bool IsChild 
    { 
     get { return Age != null; } 
    } 

    [Required(ErrorMessage="Please select the born Month")] 
    public int BirthYear1 { get; set; } 
    [Range(2, 12, ErrorMessage="Please select the born Month")] 
    public int BirthMonth { get; set; } 
    [Required(ErrorMessage = "Please select the born Date")] 
    [Range(2, int.MaxValue, ErrorMessage = "Please select the born Date")] 
    public int BirthDate { get; set; } 

} 

我的觀點是如下:

<div class="row"> 
        <div class="editor-label control-label">@Html.Label("Child " + i + " Birthday ")</div> 
        <div class="span1">@Html.DropDownListFor(m => Model.Rooms[roomCount - 1].Children[i - 1].BirthDate, new SelectList(Model.DropDown.Date, "Value", "Text"), new { @class = "mini" })</div> 
        <div class="span2">@Html.DropDownListFor(m => Model.Rooms[roomCount - 1].Children[i - 1].BirthMonth, new SelectList(Model.DropDown.Month, "Value", "Text"), new { @class = "small" })</div> 
        <div class="errorformat">@Html.ValidationMessageFor(m => Model.Rooms[roomCount - 1].Children[i - 1].BirthMonth) 
        @Html.ValidationMessageFor(m => Model.Rooms[roomCount - 1].Children[i - 1].BirthDate) 
       </div></div> 

此日期是需要驗證。用戶必須選擇除默認值以外的值。我該怎麼做,請幫忙。 謝謝。

回答

0

最後我想通了。 ASP.NET MVC 3 Unobtrusive驗證只驗證「輸入」元素。因此我不得不對jquery.validate.unobtrusive.js代碼做一些修改。

這裏我做了什麼:

jquery.validate.unobtrusive.js文件,圍繞代碼行173(我的文件),你可以找到這行代碼:$(selector).find(":input[data-val=true]").each(function(),將其更改爲:$(selector).find("[data-val=true]").each(function()

而且周圍線289,你可以找到這行代碼:element = $(options.form).find(":input[name=" + fullOtherName + "]")[0],將其更改爲:element = $(options.form).find("[name=" + fullOtherName + "]")[0]

在我看來,文件I添加驗證屬性的下拉列表如下:

@Html.DropDownListFor(Yourmodelvariable, Yourlistitems, new Dictionary<string, object>() { { "data-val-range-min", "1" }, { "data-val-range-max", "31" }, { "data-val-range", "Please select the born Date" }, { "data-val", "true" }, { "class", "mini" } }) " 

@Html.ValidationMessageFor(Yourmodelvariable) 

你可以添加驗證屬性,你想驗證(在我的情況下,我想驗證一個範圍),它對我來說就像鬆散運動一樣順暢!