在mvc3中将Html.Editorfor字段只读

时间:2011-09-18 08:19:22

标签: asp.net-mvc-3 editorfor

我正在使用它,一个编辑器模板(位于我的解决方案的Shared \ EditorTemplates文件夹中)

  <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime?>" %>
  <%=Html.TextBox("", (Model.HasValue ? Model.Value.ToString("MM/dd/yyyy") : string.Empty), ViewData )%>

这在我看来

  @Html.EditorFor(model => model.ModifiedDate)

如何在视图中只读这个字段

4 个答案:

答案 0 :(得分:5)

<%= Html.EditorFor(x => x.ModifiedDate, new { @readonly = "readonly" }) %>

更新:

好的,既然您在此向我发送了示例项目,那么问题就在于:

  1. ~/Views/Shared/EditorTempletes文件夹中存在拼写错误。它应该是~/Views/Shared/EditorTemplates
  2. 您必须将编辑器模板称为DateTime.ascx,而不是DateTime.aspx。因此,标题必须如下所示(使用<%@ Control ...代替<%@ Page ...):

    <%@ Control 
        Language="C#" 
        Inherits="System.Web.Mvc.ViewUserControl<System.DateTime?>" 
    %>
    <%= Html.TextBox(
        "", 
        (Model.HasValue ? Model.Value.ToString("MM/dd/yyyy") : string.Empty), 
        ViewData
    ) %>
    

答案 1 :(得分:3)

您可以使用:

@Html.DisplayFor()

答案 2 :(得分:2)

使用System.Web.Mvc命名空间中的[HiddenInput]属性装饰属性。

答案 3 :(得分:0)

我用这种方式显示只读信息:

@Html.DisplayFor(model => model.CadastradoEm, new { @class = "form-control" })
@Html.HiddenFor(model => model.CadastradoEm)

除了显示文字之外,您还需要添加隐藏输入,因为DisplayFor()没有生成回发的控件 ;)