【问题标题】:Declarative helper within razor view剃刀视图中的声明性助手
【发布时间】:2023-03-24 08:04:02
【问题描述】:

我在mvc中有如下代码:

<a class="cta-icon-link" >
    @Html.RenderMediaData(Model.Icon, new { TypeCssClasses = new Dictionary<string, string>() { { "imageFile", "cta-icon" }, { "VectorImageFile", "cta-icon" } } })
</a>
<a class="@cssClass" >@Model.LinkText</a>

所以基本上顺序如下:

if condition()
{
    <a>
    <image>
    </a>
}
<a/>

现在,我需要另一个条件来决定上述代码的位置:

if (placement==left)
{
    if condition()
    {
        <a>
        <image>
        </a>
    }
    <a/>
}
else
{
    <a/>
    if condition()
    {
        <a>
        <image>
        </a>
    }
}

有没有办法在 cshtml 中使用声明式辅助方法来实现这一点而无需重复代码?

【问题讨论】:

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


    【解决方案1】:

    我认为它会像这样工作 通过添加@

    @if (placement == left)
    {
        if condition()
        {
            <a>
                <image>
            </a>
        }
        <a />
    }
    else
    {
        <a />
        if condition()
        {
            <a>
                <image>
            </a>
        }
    }
    

    【讨论】:

    • 这是开始的一种方式,但是如果你看到这里有很多重复的代码。所以与其重复代码,我想使用声明性帮助函数。
    • 代码中可能会重复,但你会得到所需的结果。
    【解决方案2】:

    你可以试试这个:

    @if (placement == left&&condition())
    {
        <a>
            <image>
        </a>
        <a />
    }
    else if (placement != left&&condition())
    {
        <a />
        <a>
            <image>
        </a>
    }
    else
    {
        </a>
    }
    

    或者您可以尝试使用条件运算符?: 来替换 if,else,here is an official doc:

    @(placement == left?(condition()?Html.Raw("<a><image></a><a />"):Html.Raw("<a />")): (condition()? Html.Raw("<a /><a><image></a>") : Html.Raw("<a />")))
    

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多