0

我是 mvc3 的新手,我正在使用 c# 编码和剃刀我的视图引擎。有没有办法使用日期选择器而不使用 jquery 和其他东西。

4

2 回答 2

2

如果您不使用 javascript 和 jquery,那么您就剩下 HTML。而且您知道在 HTML 中您有标准输入字段,例如<input type="text">. 使用纯 HTML,您无法在用户单击某些日期输入时显示动态日期选择器。

于 2012-04-05T06:28:03.813 回答
0

好吧,如果你想避免“所有脚本语言”,我想你应该有三个下拉菜单,

  1. 月 (1 - 12)
  2. 天数 (1 - 31)

您的模型需要为月、日和年获取三个单独的字段。然后在您的控制器操作中,您将需要进行一些日期解析以确保它是有效日期,如果不是,请添加 ModelState 异常。

由于 MVC 带有 jQ​​uery(并且验证器非常有用),您为什么要避免使用它们?

所有这一切都可以用 jQuery 甚至纯 JavaScript 来完成,所以你真的是在限制自己。

编辑 - 添加代码示例

你的模型

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

public class DatePickerViewModel
{
     [Required]
     [DisplayName("Month")]
     [Range(1,12,ErrorMessage = "Month must be between 1 and 12")]
     public int? Date_Month {get;set;}

     [Required]
     [DisplayName("Day")]
     [Range(1,31,ErrorMessage = "Day must be between 1 and 31")]
     public int? Date_Day {get;set;}

     [Required]
     [DisplayName("Day")]
     [Range(1900,2012,ErrorMessage = "Year must be between 1900 and 2012")]
     public int? Date_Year {get;set;}
}

你的控制器

public class DatePickerController : Controller
{
     [HttpGet]
     public ActionResult Choose()
     {
          return View(new DatePickerViewModel());
     }

     [HttpPost]
     public ActionResult Choose(DatePickerViewModel model)
     {
          if(!ModelState.IsValid)
               return View(model);
          else
          {
               DateTime date;
               if(!DateTime.TryParse(String.Format("{0}/{1}/{2}",model.Date_Month, model.Date_Day, model.Date_Year),out dt))
               {
                    ModelState.AddModelError("","Invalid Date");
                    return View(model);
               }

               //Do something with the variable "date"
               return View("SomeOtherView");
          }


     }
}

还有你的看法

@model DatePickerViewModel

@using(Html.BeginForm())
{
     <div>
          <div>@Html.LabelFor(m => m.Date_Month) @Html.ValidationMessageFor( m => m.Date_Month)</div>
         <div>@Html.DropDownListFor(m => m.Date_Month, (from n in Enumerable.Range(0, 12) select new SelectListItem{ Text = n==0? "":n.ToString(),Value =  n ==0? "":n.ToString()})</div>
     </div>
     <div>
          <div>@Html.LabelFor(m => m.Date_Day) @Html.ValidationMessageFor( m => m.Date_Day)</div>
         <div>@Html.DropDownListFor(m => m.Date_Day, (from n in Enumerable.Range(0, 31) select new SelectListItem{ Text = n==0? "":n.ToString(),Value =  n ==0? "":n.ToString()})</div>
     </div>
     <div>
          <div>@Html.LabelFor(m => m.Date_Year) @Html.ValidationMessageFor( m => m.Date_Year)</div>
         <div>@Html.DropDownListFor(m => m.Date_Year, (from n in Enumerable.Range(1899, 2012) select new SelectListItem{ Text = n==1899? "":n.ToString(),Value =  n == 1899? "":n.ToString()})</div>
     </div>
     <div><input type="submit" value="Submit"/></div>
}

如您所见,您需要创建大量的原始代码来启用日期选择器而不使用 JavaScript。考虑到如果您只使用任何 jQuery 日期选择器,您所需要的只是模型/视图模型上的可为空的 DateTime 属性、视图上的文本框和一小段 JS 以将文本框转换为日期选择器。

避免重新发明轮子并重用已经存在的代码以了解如何使用任何 jQuery Date Picker 插件。

于 2012-04-05T04:52:45.930 回答