在ASP.NET Core中显示只读字段

时间:2017-08-23 08:56:29

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

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

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不应位于文本框(即使是只读),而应位于标签 div 中。

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

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

8 个答案:

答案 0 :(得分:10)

试试这个。

<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

答案 1 :(得分:3)

使用Razor语法将其输出为HTML

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

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

注意 - 这需要适当的样式,或包装在<span>标签等...

答案 2 :(得分:3)

这对我有用

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

答案 3 :(得分:2)

[ReadOnly(true)]
public string Name {get; set;} 

添加ReadOnly属性。请务必在课程顶部加入using System.Component;

答案 4 :(得分:0)

这对我有用:

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

答案 5 :(得分:0)

如果要显示模型属性Name,并且不希望它成为input元素,请执行以下操作:

<p>@Model.Name</p>

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

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

当然,它不必是p。使用divspan

给它一个类,并根据需要使用CSS对其进行样式设置。

答案 6 :(得分:0)

您可以尝试以下方法:

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

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

答案 7 :(得分:-2)

试试这个:

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