グーグルで検索するのにうんざりしていて、正確な答えが見つかりませんでした。
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が既に含まれています。RequireDatePickerfromDate.cshtmlから view または _Layout.cshtmlに渡す必要はありませんModernizr.load