VMh*_*VMh 23 razor asp.net-core-mvc tag-helpers
我想启用或禁用textarea取决于从模型中评估的条件,我正在使用textarea标记帮助器.换句话说,这样的事情:
<textarea asp-for="Doc" @(Model.MustDisable ? "disabled" : "")></textarea>
Run Code Online (Sandbox Code Playgroud)
但是我得到了以下设计时错误:标签帮助器'textarea'在元素的属性声明区域中不能有C#.
然后我尝试了:
<textarea asp-for="Doc" disabled='@(Model.MustDisable ? "disabled" : "")'></textarea>
Run Code Online (Sandbox Code Playgroud)
它没有显示任何设计时错误但它呈现如下:
Model.MustDisable==true
渲染disabled='disabled'
和Model.MustDisable==false
渲染disabled
.因此,文本区域将始终被禁用.
然后我尝试(删除's):
textarea asp-for="Doc" disabled=@(Model.MustDisable ? "disabled" : "")></textarea>
Run Code Online (Sandbox Code Playgroud)
它没有显示任何设计时间错误,但它呈现与前一个相同.
我怎样才能以正确的方式实施?
小智 35
我在选择标签帮助器时遇到了同样的问题,我尝试了很少的东西而且它有效.试试这个-
<textarea asp-for="Doc" disabled="@(Model.MustDisable ? "disabled" : null)"></textarea>
Run Code Online (Sandbox Code Playgroud)
Shy*_*yju 19
textarea标记助手没有直接支持有条件地呈现禁用的文本区域.但您可以随时扩展TextAreaTagHelper
并添加此功能.
因此,创建一个继承自TextAreaTagHelper
该类的新类.
[HtmlTargetElement("textarea", Attributes = ForAttributeName)]
public class MyCustomTextArea : TextAreaTagHelper
{
private const string ForAttributeName = "asp-for";
[HtmlAttributeName("asp-is-disabled")]
public bool IsDisabled { set; get; }
public MyCustomTextArea(IHtmlGenerator generator) : base(generator)
{
}
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (IsDisabled)
{
output.Attributes["disabled"] = "disabled";
}
base.Process(context, output);
}
}
Run Code Online (Sandbox Code Playgroud)
在您的_ViewImports.cshtml
文件中,使用该@addTagHelper
指令,指定定义上述类的程序集,以便我们的新标记帮助程序在其他剃刀视图中可用.
@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
@addTagHelper "*,YourAssemblyNameHere"
Run Code Online (Sandbox Code Playgroud)
现在在您的视图中,您可以像使用它一样使用它
@model YourSomeViewModel
<textarea asp-for="Doc" asp-is-disabled="Model.MustDisable"></textarea>
Run Code Online (Sandbox Code Playgroud)
哪里SomeViewModel
有Doc
和MustDisable
财产.
public class YourSomeViewModel
{
public string Doc { set;get; }
public bool MustDisable { set;get; }
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*and 14
它实际上非常简单,disable属性已经可以正常工作 - 你可以传入一个布尔值:
<textarea asp-for="Doc" disabled="@Model.MustDisable"></textarea>
Run Code Online (Sandbox Code Playgroud)
如果为false,disabled
则不呈现该属性