グーグルで検索するのにうんざりしていて、正確な答えが見つかりませんでした。
oradditionalViewData
のパラメーターを使用してビューからテンプレートに日付を渡すことができることはわかっていますが、テンプレートからデータを戻したい!.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")
十分な sinecModernizr.load
が既に含まれています。RequireDatePicker
fromDate.cshtml
から view または _Layout.cshtmlに渡す必要はありませんModernizr.load