【问题标题】:Dynamically assigning asp-for variables动态分配 asp-for 变量
【发布时间】:2020-03-09 15:55:06
【问题描述】:

我有一个带有输入框的表单,我想动态分配asp-for

表格

@model Character
<input type="text" asp-for="@(// If Skill.Type == "Str" then use Str)" />

人物

public int Str { get; set; }
public int Dex { get; set; }

public (string Name, string Type) Skill { get; set; } = ("Uppercut", "Str")

有什么办法可以做到吗?

【问题讨论】:

  • 将其放入新变量中,并使用它:@{string str = Model.Skill.Type == "Str" ? "Str" : "";} 或行中:@(Model.Skill.Type == "Str" ? "Str" : "")
  • @Sajid 这行不通,因为asp-for 是一个模型表达式,所以它看起来像您正在编写的代码,而不是评估结果。

标签: c# asp.net-core asp.net-core-3.1


【解决方案1】:

asp-for 标签助手属性是 ModelExpression,这意味着标签助手将查看 语法表达式 以评估输入元素绑定到的属性。这也意味着您将无法动态填充该属性。

您应该做的是在视图中动态切换输入元素:

@if (Model.Skill.Type == "Str")
{
    <input asp-for="Str" />
}
else if (Model.Skill.Type == "Dex")
{
    <input asp-for="Dex" />
}

【讨论】:

  • 我试图放弃编写 20 个&lt;input&gt; 标签(我有这么多变量),但如果这是唯一的方法,那么我必须这样做,谢谢!
【解决方案2】:

保持您决定在模型中使用哪个字段的逻辑。您应该创建一个属性 InputValue 并将其用于 asp-for。

那就这样用吧

public int InputValue
{
    set
    {
        if (Skill.Type == "Str")
        {
            Str = value;
        }
        else
        {
            Dex = value;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多