答案 0 :(得分:6)
无需创建自定义TagHelper。试试这个。
<select class="form-control" asp-for="Priority" asp-items="@priorityList" disabled="@(true)"></select>
<select class="form-control" asp-for="Priority" asp-items="@priorityList" disabled="@(false)"></select>
这个渲染:
<select class="form-control" id="Priority" name="Priority" disabled="disabled">...</select>
<select class="form-control" id="Priority" name="Priority">...</select>
我从这里意识到:https://github.com/aspnet/Mvc/issues/7333#issuecomment-363504164
答案 1 :(得分:3)
使用默认的select
标记帮助程序是不可能的,但是您可以创建自己的,并将其配置为对接受布尔值的自定义asp-disabled
属性做出反应。
在您看来:
<select class="form-control" asp-for="Priority" asp-items="@priorityList" asp-disabled="@(Model.CaseMode == Mode.Closed)"></select>
然后,创建您的TagHelper
课程:
using Microsoft.AspNetCore.Razor.TagHelpers;
using System;
namespace YourNamespace.TagHelpers
{
// Triggered on all select elements with the asp-disabled attribute
[HtmlTargetElement("select", Attributes = DisabledAttributeName)]
public class SelectTagHelper : TagHelper
{
private const string DisabledAttributeName = "asp-disabled";
/// Get the value of the condition
[HtmlAttributeName(DisabledAttributeName)]
public bool Disabled { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (context == null)
throw new ArgumentNullException(nameof(context));
if (output == null)
throw new ArgumentNullException(nameof(output));
if (Disabled)
output.Attributes.SetAttribute("disabled", null);
}
}
}
为确保您使用TagHelper,您还需要在_ViewImports.cshtml
中注册:
@addTagHelper *, YourNamespace
答案 2 :(得分:0)
因为disabled =“ false”对我不起作用,也不想只为一个选择列表添加扩展类...这是我解决的方法:
@{ string disabled = Model.CaseMode == Mode.Active ? "disabled" : null; }
<select asp-for="Priority" class="form-control" disabled="@disabled" asp-items="@priorityList"></select>
另一种可行的解决方案是将您的条件保存在ViewData词典中,并在文档加载后进行评估:
@if((bool)ViewData["YourModelCondition"]){
$('#selectListID').prop('disabled', 'disabled');
}
注意:如果使用第二种解决方案,则需要为选择项指定ID。