3

下面是一个 EditorTemplate,它使用助手呈现 Bootstrap datetimepicker,EditorFor我看到的问题是脚本部分。它适用于DateTimePicker每个视图一个 - 但由于我使用类选择器,每当我使用 2 个或更多DateTimePicker的每个视图时,它都会呈现重复<script>的部分,从而混淆 DOMTextBox以调用日历。我在这里想念什么?

   @model DateTime?
   <div class='input-group date datePicker'>
      <span class="input-group-sm">
         @Html.TextBox("", Model.HasValue ? Model.Value.ToString("d") : String.Empty)
      </span>
   </div>
   <script type="text/javascript">
       $(function() {
       $('.datePicker').datetimepicker({
           pickTime: false
       });
   });
   </script>
4

2 回答 2

11

您正确推断出的问题是,当您在视图中包含两个日期选择器时,编辑器模板中定义的脚本块将运行两次;当它运行两次时,插件的行为并不像预期的那样。

对此的一种解决方案是仅针对每个脚本块中编辑器模板中的日期选择器输入。例如,

@model DateTime?
<div class='input-group date datePicker'>
   <span class="input-group-sm">
      @Html.TextBox("", Model.HasValue ? Model.Value.ToString("d") : String.Empty)
   </span>
</div>
<script type="text/javascript">
    $(function() {
        // target only the input in this editor template
        $('#@Html.IdForModel()').datetimepicker({
            pickTime: false
        });
    });
</script>
于 2014-03-23T21:31:08.893 回答
0

至于渲染一次脚本,下面呢?到目前为止它对我有用。有什么潜在的问题吗?

Editor Template - DateTime.cshtml

@model System.DateTime?
@Html.TextBox("", String.Format("{0:d}", Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datepicker" })


_Layout.cshtml

<script type="text/javascript">
  $().ready(function () {
    $('.datepicker').datepicker({
      changeMonth: true,
      changeYear: true,
      showOn: "button",
      buttonImage: "/Images/calendar.gif",
      buttonImageOnly: true
    });
   }
</script>
于 2015-03-05T00:19:01.687 回答