我厌倦了谷歌搜索并没有找到确切的答案。
我知道我可以通过additionalViewData参数将视图中的日期传递给模板.EditorFor(),.DisplayFor()但是我想要从模板返回数据!
我Date.cshtml在我的~/Views/Shared/EditorTemplates/. 我的模型属性已经有这样的东西:
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无需传递
RequireDatePickerfromDate.cshtmlto view 或 _Layout.cshtml asModernizr.load