【问题标题】:Asp.net core mvc how to set attribute 'required' via razorAsp.net core mvc如何通过剃刀设置属性“必需”
【发布时间】:2020-07-14 06:51:59
【问题描述】:

我在 mvc 中有一个表单,其中不同的字段设置由数据库控制。

我写了一个 razor 函数来检查某些字段是否为必填项。

如果为真,我需要设置所需的属性。目前我无法在输入标签中调用 razor 函数。

我有什么选择?

<input type="text" class="form-control" asp-for="@Model.Title" required="@myfunction()" maxlength="200" />

【问题讨论】:

    标签: c# asp.net-mvc razor asp.net-core-mvc


    【解决方案1】:

    您可以为这种情况创建一个标签助手,如下所示

        private const string ForAttributeName = "asp-for";
    
        [HtmlAttributeName("asp-is-required")]
        public bool IsMandatory { set; get; }
    
        public InputTextRequired(IHtmlGenerator generator) : base(generator)
        {
        }
    
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            if (IsMandatory)
            {
                var attribute = new TagHelperAttribute("required");
                output.Attributes.Add(attribute);
            }
            base.Process(context, output);
        }
    }
    

    您可以在输入标签中使用该标签助手,如下所示

    <input type="text" class="form-control" asp-for="@Model.Title" asp-is-required="true/false from razor" maxlength="200" />
    

    有关Tag Helper的更多信息请使用此链接

    【讨论】:

      【解决方案2】:

      如果我理解正确,您已将所需参数保存在数据库中,因此您可以从后端传递它。我建议使用 Viewbag 并将其发送到您的控制器中查看。

      然后您可以设置所需的标签。

      【讨论】:

      • “我会推荐使用 Viewbag” 为什么?这听起来不像是一个可扩展、可维护的解决方案。
      • @CodeCaste 为什么它不是可扩展的、可维护的解决方案。 Viewbag 用于将数据从控制器发送到视图,您在填充数据后不需要回发。
      • 是的,现在您在 30 个视图中显示了 20 个模型的 10 个属性,祝您好运。您没有使用 ViewBag 的静态类型。您必须复制粘贴很多标识符,这很容易出错。自定义验证属性似乎更有用,您只需编写一次逻辑,然后让 MVC 完成其余工作。 ViewBag 非常适合一次性的东西,例如页面标题或您不想为其创建模型的一次性下拉菜单,但除此之外,它毫无用处。
      • 是的,您可以为您的模型创建自定义注释,但是您必须向模型添加参数,这不是数据,无论如何您必须在每次要使用它时分配该参数,因为您将无法从数据库中选择它。我看到了您的解决方案的一个优点,您可以更轻松地管理验证消息。
      • @TomasKuzminskas 除了 required 之外,您不能将任何其他值传递给 required。 required ="" 等价于 required 等价于 requied = "required"
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 2011-06-09
      • 2011-12-05
      • 1970-01-01
      相关资源
      最近更新 更多