【发布时间】:2012-10-19 00:42:40
【问题描述】:
我已经厌倦了谷歌搜索并没有找到确切的答案。
我知道我可以通过.EditorFor() 或.DisplayFor() 的additionalViewData 参数将日期从视图传递到模板,但我想要从模板返回数据!
我的~/Views/Shared/EditorTemplates/ 中有Date.cshtml。
我的模型属性已经有这样的东西:
public class Person
{
[DisplayFormat(DataFormatString = "{0:d}")]
[DataType(DataType.Date)]
public Nullable<DateTime> BirthDate { get; set; }
}
和视图:
@Html.EditorFor(model => model.BirthDate)
现在我只想在视图使用日期模板时加载 datepicker 脚本。
所以我尝试在我的模板中像这样使用RequireDatePicker:
@model DateTime?
@Html.TextBox(...)
@{ViewBag.RequireDatePicker = true;}
在_Layout.cshtml的底部:
@Scripts.Render("~/bundles/jquery")
@if (ViewBag.RequireDatePicker == true)
{
<script type="text/javascript">
if (!Modernizr.inputtypes.date) {
// Todo: use Modernizr.load
$(function () {
$("input[type='date']").datepicker();
});
}
</script>
}
问题是我刚刚意识到ViewBag/ViewData 具有与视图/部分和显示/编辑器模板不同的上下文。最好的方法是什么?
修复 我可以通过这样的路由数据将模板中的数据传递回视图:
@{ViewContext.RouteData.DataToken["requireDatePicker"] = true;}
但是我最终没有传递数据,而只是这样:
-
捆绑
"~/bundles/jqueryui"那个- 从中删除 jquery ui 日期选择器功能(并移至
"~/bundles/jqueryui-datepicker") - 包括
Modernizr.inputtypes.date检查和Modernizr.load以加载"~/bundles/jqueryui-datepicker"
- 从中删除 jquery ui 日期选择器功能(并移至
无需修改
_layout.cshtml即可检查RequireDatePicker。@Scripts.Render("~/bundles/jquery")和@Scripts.Render("~/bundles/jqueryui")就足够了,Modernizr.load已经包含在内了。无需将
RequireDatePicker从Date.cshtml传递给查看或_Layout.cshtml 作为Modernizr.load
【问题讨论】:
标签: c# asp.net-mvc razor viewbag