我是 mvc3 的新手,我正在使用 c# 编码和剃刀我的视图引擎。有没有办法使用日期选择器而不使用 jquery 和其他东西。
问问题
1196 次
2 回答
2
如果您不使用 javascript 和 jquery,那么您就剩下 HTML。而且您知道在 HTML 中您有标准输入字段,例如<input type="text">
. 使用纯 HTML,您无法在用户单击某些日期输入时显示动态日期选择器。
于 2012-04-05T06:28:03.813 回答
0
好吧,如果你想避免“所有脚本语言”,我想你应该有三个下拉菜单,
- 月 (1 - 12)
- 天数 (1 - 31)
- 年
您的模型需要为月、日和年获取三个单独的字段。然后在您的控制器操作中,您将需要进行一些日期解析以确保它是有效日期,如果不是,请添加 ModelState 异常。
由于 MVC 带有 jQuery(并且验证器非常有用),您为什么要避免使用它们?
所有这一切都可以用 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 回答