MVC下使用日期控件
初学MVC,使用日期控件的时候发现不是特别理想,本来是想直接使用JQuery的日期控件的,发现支持的不是很好,type类型要改成date才能使用,而且编辑的时候使用@Html.EditFor也不能绑定值,不知道大家有没有在项目中使用过Jquery的日期控件,有没有遇到什么问题,希望能控讨一下。
于是乎,在园友的推荐下,改用大名鼎鼎的My97,下载地址:http://www.my97.net/dp/demo/index.htm,下载->包含到项目.然后在BundleConfig文件中添加引用
bundles.Add(new ScriptBundle("~/bundles/My97DatePicker").Include(
"~/My97DatePicker/WdatePicker.js",
"~/My97DatePicker/calendar.js"));
bundles.Add(new StyleBundle("~/My97DatePicker/css").Include(
"~/My97DatePicker/skin/WdatePicker.css"));
直接在母版页中对文件进行引用
@System.Web.Optimization.Styles.Render("~/My97DatePicker/css")
@System.Web.Optimization.Scripts.Render("~/bundles/My97DatePicker")
为了使用方便,给HtmlHelper增加了扩展方法,方便使用,返回值是string
public static string Calendar(this HtmlHelper helper, string name)
{
return Calendar(helper, name, defaultFormat);
} @Html.Calendar("ProductBeginDate")
但这样会有一个问题,在界面上使用的时候,会生成带双引号的文本,而不是Html的标签
"<input type="date" id="BuyDate" name="BuyDate" onfocus="WdatePicker({dateFmt:'yyyy-MM-dd'})" class="datetype" value="--">"
再于是乎,在园友的建议下,给这个执行加了@Html.Raw给转换成了html标签
@Html.Raw(@Html.Calendar("ProductBeginDate"))
这样做,果然能正常显示了

但是总是觉得在外面加个@Html.Raw的使用方式很是不爽,这个Raw方法只不过是返回了IHtmlString,那就改进一下扩展方法吧
public static MvcHtmlString Calendar(this HtmlHelper helper, string name)
{
return Calendar(helper, name, defaultFormat);
}
界面使用时,就可以直接使用,产生正确的html标签了
@Html.Calendar("ProductBeginDate")
最后,附上扩展方法的所有代码,方便日后再次使用
/// <summary>
/// Extended the HtmlHelper for Calendar
/// </summary>
public static class CalendarExtensions
{
private static string defaultFormat = "yyyy-MM-dd"; /// <summary>
/// 使用特定的名称生成控件
/// </summary>
/// <param name="helper">HtmlHelper对象</param>
/// <param name="name">控件名称</param>
/// <returns>Html文本</returns>
public static MvcHtmlString Calendar(this HtmlHelper helper, string name)
{
return Calendar(helper, name, defaultFormat);
} /// <summary>
/// 使用特定的名称生成控件
/// </summary>
/// <param name="helper">HtmlHelper对象</param>
/// <param name="name">控件名称</param>
/// <param name="format">显示格式</param>
/// <returns>Html文本</returns>
public static MvcHtmlString Calendar(this HtmlHelper helper, string name, string format)
{
return GenerateHtml(name, null, format);
} /// <summary>
/// 使用特定的名称和初始值生成控件
/// </summary>
/// <param name="helper">HtmlHelper对象</param>
/// <param name="name">控件名称</param>
/// <param name="date">要显示的日期时间</param>
/// <returns>Html文本</returns>
public static MvcHtmlString Calendar(this HtmlHelper helper, string name, DateTime date)
{
return Calendar(helper, name, date, defaultFormat);
} /// <summary>
/// 使用特定的名称和初始值生成控件
/// </summary>
/// <param name="helper">HtmlHelper对象</param>
/// <param name="name">控件名称</param>
/// <param name="date">要显示的日期时间</param>
/// <param name="format">显示格式</param>
/// <returns>Html文本</returns>
public static MvcHtmlString Calendar(this HtmlHelper helper, string name, DateTime date, string format)
{
return GenerateHtml(name, date, format);
} /// <summary>
/// 通过lambda表达式生成控件
/// </summary>
/// <param name="helper">HtmlHelper对象</param>
/// <param name="expression">lambda表达式,指定要显示的属性及其所属对象</param>
/// <returns>Html文本</returns>
public static MvcHtmlString CalendarFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
return CalendarFor(helper, expression, defaultFormat);
} /// <summary>
/// 通过lambda表达式生成控件
/// </summary>
/// <param name="helper">HtmlHelper对象</param>
/// <param name="expression">lambda表达式,指定要显示的属性及其所属对象</param>
/// <param name="format">显示格式</param>
/// <returns>Html文本</returns>
public static MvcHtmlString CalendarFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, string format)
{
string name = ExpressionHelper.GetExpressionText(expression);
DateTime value; object data = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, helper.ViewData).Model;
if (data != null && DateTime.TryParse(data.ToString(), out value))
{
return GenerateHtml(name, value, format);
}
else
{
return GenerateHtml(name, null, format);
}
} /// <summary>
/// 通过lambda表达式获取要显示的日期时间
/// </summary>
/// <param name="helper">HtmlHelper对象</param>
/// <param name="expression">lambda表达式,指定要显示的属性及其所属对象</param>
/// <param name="format">显示格式</param>
/// <returns>Html文本</returns>
public static MvcHtmlString CalendarDisplayFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, string format)
{
string name = ExpressionHelper.GetExpressionText(expression);
DateTime value; object data = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, helper.ViewData).Model;
if (data != null && DateTime.TryParse(data.ToString(), out value))
{
return MvcHtmlString.Create(value.ToString(format));
}
else
{
return MvcHtmlString.Create(string.Empty);
}
} /// <summary>
/// 通过lambda表达式获取要显示的日期时间
/// </summary>
/// <param name="helper">HtmlHelper对象</param>
/// <param name="expression">lambda表达式,指定要显示的属性及其所属对象</param>
/// <returns>Html文本</returns>
public static MvcHtmlString CalendarDisplayFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
return CalendarDisplayFor(helper, expression, defaultFormat);
} /// <summary>
/// 生成输入框的Html
/// </summary>
/// <param name="name">calendar的名称</param>
/// <param name="date">calendar的值</param>
/// <returns>html文本</returns>
private static MvcHtmlString GenerateHtml(string name, DateTime? date, string format)
{
string dateStr = string.Empty; if (date != null)
{
dateStr = "<input type=\"text\" id=\"" + name + "\" name=\"" + name + "\" onfocus=\"WdatePicker({dateFmt:'" + format + "'})\" class=\"Wdate\" value=\"" + date.Value.ToString(format) + "\" />";
}
else
{
dateStr = "<input type=\"text\" id=\"" + name + "\" name=\"" + name + "\" onfocus=\"WdatePicker({dateFmt:'" + format + "'})\" class=\"Wdate\" value=\"\" />";
} return MvcHtmlString.Create(dateStr);
}
}
总结:我的使用方法不一定是最好的,但是总算暂时解决了我的问题,如果园友有更好的方法,或是关于jquery的日期控件我使用方式有误的问题,欢迎指正。
MVC下使用日期控件的更多相关文章
- MVC模式下My97DatePicker日期控件引用注意事项
My97DatePicker日期控件之前在用webform模式开发的时候,只要 <script language="javascript" type="text/j ...
- extjs4.0下的日期控件的星期显示为y的解决办法
没有修改的时候的问题: 今天第一次写博客,就记录一下以前extjs4.2下运用日期组件的星期显示问题,当时找了n久,可能是extjs4.2才出来没多久,没有多少人发现这个问题或者说很少有人将Extjs ...
- bootstrap日期控件在火狐下的模态框中选择时间下拉菜单无效的解决办法
今天收到程序组提交的一个兼容BUG,在火狐中使用模态框加载日期控件时选择时间下拉菜单没有效果(不能点击),而在谷歌中却是好的, 排错思路:1,在当前页面主层放置一个时间控件,测试通过 2,在ajax加 ...
- phpcmsV9中表单向导在js调用里日期控件在IE下报Calendar未定义的解决办法
最近在phpcmsV9里用表单向导弄个的提交表单,但用了日期和时间类型时,用 <script language='javascript' src='{APP_PATH}index.php?m ...
- SSH+DWZ、JQuery-UI ,swfobject.embedSWF属性与用法,IE下日期控件被flash控件挡住
---恢复内容开始--- 最近在做SSH+DWZ(JQuery-UI)项目,在用到图表问题的时候,出现在IE下面,日期控件被flash被挡住而不能选取日期情况,经在网络搜查,现在解决办法如下: 1.首 ...
- 怎样使用My97日期控件
有网友说无法使用My97日期控件,Insus.NET测试一下,是可以正常使用了. 在ASP.NET MVC环境中测试. 去官网下载My97日期控件程序包: 下载解压之后,把程序的目录拷贝至projec ...
- mvc4中jquery-ui日期控件datepicker的应用
mvc4中jquery-ui日期控件datepicker的应用 本文适合mvc中日期选择需要的同学: 假设读者已经具备了mvc4和javascript中的相关知识 一. 开始项目之前把项目中目录:/C ...
- FineUIPro v5.2.0已发布(jQuery升级,自定义图标,日期控件)
FineUIPro/MVC/Core/JS v5.2.0 已经于 2018-8-20 发布,官网示例已更新,如果大家在测试中发现任何问题,请回复本帖,谢谢了. 在线示例: FineUI Pro:htt ...
- bootstrop 日期控件 datepicker被弹出框dialog覆盖的解决办法
筒子们在使用bootstrap的日期控件(datepicker , 现在官网提供的名称叫 datetimepicker)时可能会遇到如上图的问题这是啥原因造成的呢? 答案很简单时输出的优先级造成的(z ...
随机推荐
- python练习_简单登录
python练习_简单登录 需求: 做一个登录的小程序,验证用户与密码 要求登录三次错误后锁定 以下代码实现的功能与思路: 功能: 1.除admin以外的用户累计登录失败次数超过三次则锁定,此时需要管 ...
- 大话设计模式--解释器模式 interpreter -- C++实现实例
1. 解释器模式: 给定一个语言,定义它的文法的一种表示 并 定义一个解释器,这个解释器使用该表示文法 来解释语言中的句子. 如果一种特定类型的问题发生的频率很高,那么可能就值得将该问题的各个实例表述 ...
- .net Core 相关问题
1.Vs中注释生成xml文档文件 项目->属性->生成->输出->勾选“XML文档文件”->保存 就完成. 保存后出现没有勾选情况,直接用txt打开.csproj文件加 ...
- python-管理MySQL之ConfigParser模块
1.拷贝2.7版本的ConfigParser.py模块支持无值解析 cp /usr/local/src/Python-2.7.5/Lib/ConfigParser.py /usr/lib/python ...
- 备忘录One
1.POI操作excel技术博客记录 2.SSH框架搭建记录 3.SSM框架搭建记录 4.文件上传下载记录 5.面试题整理
- 【二叉树的递归】05二叉树中找任意起点和终点使他们的路径和最大【Binary Tree Maximum Path Sum】
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树,寻找值最大的路径. ...
- 关于对H264码流的PS的封装的相关代码实现
1.写在开始之前: 最近因为新工作要维护别人留下的GB模块代码,先熟悉了流程,然后也试着封装了下ps流,结果也能通过测试正常预览了,当然,其中开发读文档的头疼,预览花屏,卡帧的事情都有遇到,当时慢慢的 ...
- [Luogu3960][NOIP2017]列队
luogu sol 震惊!\(NOIP\)居然也出数据结构! 话说回来,其实只需要对每一行的前\(m-1\)个人维护一个数据结构,然后对最后一列的\(m\)个人也维护一个数据结构就好了.具体的话写平衡 ...
- select元素选择时间以及jQuery对select的属性操作
<select class="input04" id="1" name="in_class1" onchange="setc ...
- redis的read error on connection错误解决
昨日,公司php调用redis报错:read error on connection 2015-01-29 23:59:050.13330000,redis存放的是用户session. 在网上查询,大 ...