asp-for和if条件是否在同一组件中

时间:2019-02-06 17:19:58

标签: c# asp.net razor

我正在尝试在组件内部使用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中做到这一点

4 个答案:

答案 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,如果disabledModel.Unlucky,它将完全忽略false属性。

它还可以与readonly或您需要这种行为的任何其他属性一起使用。

此处的窍门是属性值应具有布尔类型,以这种方式进行解释。例如,如果@Model.Unlucky是字符串"true",它将仅按原样呈现disabled="true"