我正在尝试在组件内部使用asp-for和条件,但是我找不到解决方法。
这是我的代码
<label asp-for="@Model.Selected">
@Model.Nome
<input type="checkbox" asp-for="@Model.Selected" />
</label>
我想喜欢
<label asp-for="@Model.Selected">
@Model.Nome
<input type="checkbox" asp-for="@Model.Selected" @((Model.Unlucky) ? "disabled") />
</label>
我如何在ASP.Net Razor中做到这一点
答案 0 :(得分:1)
您需要三元运算符。您可以像这样使用它。假设Model.Unluck
是一个字符串,否则您需要在其上使用ToString()
,因为两个结果必须具有相同的数据类型。
<input type="checkbox" asp-for="@(Model.Selected ? Model.Unluck : "disabled")" />
如果Model.Unluck
是运算符的布尔值,则可以这样做。
<input type="checkbox" asp-for="@(Model.Unluck ? "enabled" : "disabled")" />
<input type="checkbox" asp-for="@(Model.Unluck ? "true" : "false")" />
答案 1 :(得分:0)
我认为您可以在该变量之后添加一个新变量,并构建字符串以禁用输入:
@{
var disabledTag = Model.Unlucky == null ? "disable" : "";
}
<input type="checkbox" asp-for="@Model.Selected" @disabledTag) />
答案 2 :(得分:0)
假设您正在使用Core MVC,则有两个选项可以在disabled
标记助手中有条件地设置<input>
属性。这些是这些选项:
选项1-使用HTML帮助器
创建一个静态类,该类返回HtmlString
以使用三元运算符设置disabled
属性:
public static class HtmlExtensions
{
public static IHtmlContent SetDisabled(this IHtmlHelper helper, bool value)
{
return new HtmlString(value ? @"disabled=""disabled""" : "");
}
}
然后在Razor视图中使用该帮助程序:
<input type="checkbox" asp-for="@Model.Selected" @Html.SetDisabled(Model.Unlucky) />
选项2-创建标签帮助程序属性
您可以构建从TagHelper
实例派生的自定义类,并指定目标元素以添加disabled
属性:
[HtmlTargetElement("checkbox")]
public class DisabledCheckBox : TagHelper
{
[HtmlAttributeName("asp-disabled")]
public bool IsDisabled { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (IsDisabled)
{
var d = new TagHelperAttribute("disabled", "disabled");
output.Attributes.Add(d);
}
base.Process(context, output);
}
}
然后您可以在标签帮助程序中使用该属性:
<input type="checkbox" asp-for="@Model.Selected" asp-disabled="@Model.Unlucky" />
注释:
1)对于这两个选项,请检查以下行是否存在,以确保您已在_ViewImports.cshtml
内启用了标记帮助程序支持:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, YourProjectNamespace
2)disabled
属性是一个布尔属性,当存在时,无论其具有什么值,它都会禁用输入元素。因此,如果要保持启用状态,则必须缺少disabled
属性。
答案 3 :(得分:0)
您不需要任何三元操作或自定义标签帮助程序即可在剃须刀中禁用元素。
您可以使用:
<input disabled="@Model.Unlucky" />
如果<input disabled="disabled" />
是Model.Unlucky
,它将渲染true
,如果disabled
是Model.Unlucky
,它将完全忽略false
属性。
它还可以与readonly
或您需要这种行为的任何其他属性一起使用。
此处的窍门是属性值应具有布尔类型,以这种方式进行解释。例如,如果@Model.Unlucky
是字符串"true"
,它将仅按原样呈现disabled="true"
。