我厌倦了谷歌搜索并没有找到确切的答案。
我知道我可以通过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
无需传递
RequireDatePicker
fromDate.cshtml
to view 或 _Layout.cshtml asModernizr.load