Blazor InputText:有条件地呈现属性

Aar*_*don 11 asp.net-core blazor blazor-server-side

Blazor vRC1

我正在寻找一种关于如何有条件地呈现一个<InputText>(或任何与此相关的输入组件)中的属性的简单技术。这在 MVC Razor 中曾经很简单,您只需在@(...)语句中编写条件逻辑即可。现在,书写@(...)在 Razor 语法中具有不同的含义。

例如,我想有条件地输出 .html 的autofocusHTML 属性InputText

<InputText 
 @bind-Value="@TextProperty"
 @(MyModel.isAutoFocus ? "autofocus" : "") <-  This is invalid razor syntax!
/>
Run Code Online (Sandbox Code Playgroud)

小智 16

这可以通过@attributes 标签实现。在这里查看更多

基本上,您可以向 InputText 添加 @attributes 标签。这可以绑定到一个参数,或者一个方便的小方法。

<InputText @bind-Value="@TextProperty" @attributes="HandyFunction()" />

@code{
    Dictionary<string,object> HandyFunction()
    {
        var dict = new Dictionary<string, object>();
        if(MyModel.isAutoFocus) dict.Add("autofocus",true);
        return dict;
    }
}
Run Code Online (Sandbox Code Playgroud)


Aar*_*don 16

事实证明,Blazor将不会呈现属性如果属性的值falsenull

https://docs.microsoft.com/en-us/aspnet/core/blazor/components?view=aspnetcore-3.0#conditional-html-element-attributes

HTML 元素属性基于 .NET 值有条件地呈现。如果值为 false 或 null,则不会呈现该属性。如果该值为 true,则该属性将呈现为最小化。

<InputText @bind-Value="@TextProperty" autofocus="@MyModel.isAutoFocus" />
Run Code Online (Sandbox Code Playgroud)


Rya*_*yan 10

你可以试试下面的代码:

<InputText  @bind-Value="@TextProperty"  autofocus="@(MyModel.isAutoFocus)"  />
Run Code Online (Sandbox Code Playgroud)

参考https://github.com/aspnet/AspNetCore/issues/10122

  • @Aaron Hudon我尝试过,发现如果设置`autofocus= true`,它将在页面的输入中显示为`autofocus`,如果`autofocus= false`,它将不会显示为输入的属性。也许你可以打开浏览器F12查看结果? (4认同)
  • 自动对焦属性的存在启用了该功能。我需要有条件地写出属性,而不是值。 (3认同)