【问题标题】:Display a readonly field in ASP.NET Core在 ASP.NET Core 中显示只读字段
【发布时间】:2017-08-23 08:56:29
【问题描述】:

我是 ASP.NET Core 的新手,想询问在 w 视图中显示字段的问题。 我有一个

class Person { 
    public string Name {get; set;} 
    public string Nickname {get; set;} 
}

通常,在 EditPerson 视图中,我会这样做

<input asp-for="Name" class="form-control" />
<input asp-for="Nickname" class="form-control" />

显示字段。

但在我的EditPerson 视图中,我需要将Name 显示为只读字段,并将Nickname 显示为可编辑字段。

Name 不应该在 textbox 中(甚至是只读的),而应该在 labeldiv...

是否有显示此类字段的标准方法?

我不想将该字段更新回模型或数据库,我只需要读取该字段。

【问题讨论】:

    标签: c# asp.net-core asp.net-core-tag-helpers


    【解决方案1】:

    试试这个。

    <input asp-for="Name" class="form-control" readonly="@(true)">
    <input asp-for="Name" class="form-control" readonly="@(false)">
    

    这个渲染:

    <input class="form-control" type="text" id="Name" name="Name" value="Tom" readonly="readonly">
    <input class="form-control" type="text" id="Name" name="Name" value="Tom">
    

    我是从这里意识到的:https://github.com/aspnet/Mvc/issues/7333#issuecomment-363504164

    【讨论】:

    • 好点,但请阅读 OP 名称不应在文本框中(即使是只读的)
    【解决方案2】:

    使用 Razor 语法将其输出为 HTML

    https://docs.microsoft.com/en-us/aspnet/core/mvc/views/razor

    @Model.Name
    <input asp-for="Nickname" class="form-control" />
    

    注意 - 这将需要适当的样式,或包装在 &lt;span&gt; 标记等...

    【讨论】:

    • 恐怕标签会显示字段的DisplayName,而不是字段值,不是吗?
    • 应该是@Model.Name
    【解决方案3】:

    这对我有用

    <input asp-for="Name" class="form-control" ReadOnly="true"/>
    <input asp-for="Nickname" class="form-control" />
    

    【讨论】:

    • 这将在文本框中显示值。 OP声明The Name should not be in a textbox
    • 我也不希望字段更新回模型
    • 该字段不会被更新,它只会使文本框只读
    • 第二个不会生成属性的值,而是为其生成一个标签(属性名称或 DisplayName,如果指定)。 P.S:关于第一个 - 此外,如果您手动伪造输入的值(并最终删除 readonly 属性),模型将被更新,因此如果您没有在服务器端专门验证它,这有点不安全。
    • @SamuilPetrov 不止于此,标签默认为只读 :)
    【解决方案4】:
    [ReadOnly(true)]
    public string Name {get; set;} 
    

    添加只读属性。请记住将using System.Component; 放在班级顶部。

    【讨论】:

    • 这与标记的呈现方式完全无关。
    【解决方案5】:

    如果您想显示模型属性 Name 并且不希望它是 input 元素,只需这样做:

    <p>@Model.Name</p>
    

    重要提示:如果您在模型中使用了Name 上的DisplayFormat 属性(例如,应用数字/日期格式或控制空白/空值的显示方式),您必须这样做改为:

    <p>@Html.DisplayFor(m => m.Name)</p>
    

    当然,它不需要是p。使用divspan等。

    给它一个类并根据需要使用 CSS 设置它的样式。

    【讨论】:

      【解决方案6】:

      这对我有用:

      <input asp-for="Name" class="form-control" readonly="readonly" />
      

      【讨论】:

        【解决方案7】:

        你可以试试这个:

        <input asp-for="Name" readonly="@(!string.IsNullOrEmpty(Model.Name))" />
        <input asp-for="Nickname" />
        

        在此处使用任何自定义条件,只需使其返回 truefalsereadonly="@(!string.IsNullOrEmpty(Model.Name))"

        【讨论】:

          【解决方案8】:

          试试这个:

          <label class="form-control">@Model.Name</label>
          

          【讨论】:

            猜你喜欢
            • 2022-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-27
            • 2015-08-12
            • 1970-01-01
            • 2023-03-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多