【问题标题】:formatting DateTime error "Templates can be used only with field access, property access, single-dimension array index.."格式化 DateTime 错误“模板只能用于字段访问、属性访问、单维数组索引..”
【发布时间】:2013-10-17 02:35:51
【问题描述】:

在 MVC Razor 视图中,我尝试将 DateTime 字段格式化为仅显示时间。使用下面的代码我收到错误“模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。”

<td>@(Html.DisplayFor(m=>row.LastUpdatedDate.ToString("HH:mm:ss")))</td>

请帮忙看看是什么导致了这个错误以及如何解决它?

感谢您的帮助。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 razor


    【解决方案1】:

    我遇到了同样的问题,我已经解决了。 如果您想将“LastUpdatedDate”转换为特定格式,那么您可以试试这个:

    @Html.TextBoxFor(m=>row.LastUpdatedDate, 
        new { @Value = Convert.ToString(row.LastUpdatedDate.ToShortDateString()) })
    

    【讨论】:

    • 谢谢,没想到只是更改 HTML 值
    • 这是正确的做法,而不是选择的答案
    【解决方案2】:

    DisplayFor 需要一个表达式来标识包含要显示的属性的对象。它将使用内置或自定义模板来呈现该显示。您试图提供显示逻辑作为该表达式参数,这是无效的。

    使用

    @String.Format("HH:mm:ss", Model.row.LastUpdateDate)
    

    @Model.row.LastUpdateDate.ToString("HH:mm:ss")
    

    【讨论】:

      【解决方案3】:

      另一种可能的方法是使用扩展方法来实现相同的目的。使用这种方法,您将不会使用硬编码格式填充视图。

      扩展方法

          /// <summary>
          /// Converts a DateTime string to Date string. Also if Date is default value i.e. 01/01/0001
          /// then returns String.Empty.
          /// </summary>
          /// <param name="inputDate">Input DateTime property </param>
          /// <param name="showOnlyDate">Pass true to show only date.
          /// False will keep the date as it is.</param>
          /// <returns></returns>
          public static string ToString(this DateTime inputDate, bool showOnlyDate)
          {
              var resultDate = inputDate.ToString();
      
              if (showOnlyDate)
              {
                  if (inputDate == DateTime.MinValue)
                  {
                      resultDate = string.Empty;
                  }
                  else
                  {
                      resultDate = inputDate.ToString("dd-MMM-yyyy");
                  }
              }
              return resultDate;
          }
      

      查看

       @Model.LastUpdateDate.ToString(true).
      

      链接:DateTime to Date in ASP.net MVC

      【讨论】:

        【解决方案4】:

        你有一个非常简单的方法来解决这个问题,你可能会不止一次遇到这个问题。

        要了解发生了什么,您将传递一个方法作为参数。相反,您应该传递一个表达式。

        而不是这样做

        <td>@(Html.DisplayFor(m=>row.LastUpdatedDate.ToString("HH:mm:ss")))</td>
        

        你应该这样做

        var date = row.LastUpdatedDate.ToString("HH:mm:ss")
        <td>@Html.DisplayFor(m=> date)</td>
        

        【讨论】:

        【解决方案5】:

        代替TextBoxFor使用TextBox并在值字段中指定格式,即

        @Html.TextBox("textboxName", Model.dateName.ToString("MMM dd yyyy"))
        

        使用引导程序日期选择器如下所示:

        <div class="input-group date datetime col-md-8 col-xs-7" data-min-view="2" data-date-format="M dd yyyy">
         @Html.TextBox("closeDate", Model.closeDate.ToString("MMM dd yyyy"), new { @class = "form-control", @readonly = "readonly", size = "16", placeholder = Lang.Label_closeDate })
         <span class="input-group-addon btn btn-primary">
          <span class="glyphicon glyphicon-th"></span>
         </span>
        </div>
        

        【讨论】:

          猜你喜欢
          • 2014-07-03
          • 1970-01-01
          • 2021-05-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-03
          相关资源
          最近更新 更多