在 Mvc 3 剃须刀视图中,基于模型中的 Null 有条件地呈现 html 的最佳方法是什么

本文关键字:有条件 Null 是什么 最佳 html 方法 模型 视图 剃须刀 Mvc 于模型 | 更新日期: 2023-09-27 18:33:07

这肯定是一个简单的问题,但我很难弄清楚。

我想做这样的事情...

@(string.IsNullOrEmpty(Model.CustomerUrl) ? "" : <a href="@Model.CustomerUrl">Click me</a>)

此代码段不起作用。

将 html 与 razor 语法混合以及在标签属性中包含引号使得很难弄清楚。

我喜欢剃须刀,除了弄清楚这种东西真的让我绊倒了。

如果 CustomerUrl 为空或为空,我很想根本不呈现以下内容......

<p class="customerLink links"><a href="@Model.CustomerUrl">@Model.CustomerName</a></p>

编辑
这仍然对我不起作用...不过感谢您的建议。

我的问题是上面的代码已经在 Razor 代码块中。 这是我无法弄清楚的实际代码...

编辑二 - 以下代码现在工作

    @if (Model.Count() > 0)
    {
        foreach (var partner in Model)
        {
            <li>
                @Html.ActionLink(@partner.CustomerName, "Details", "Customer", new { id = Customer.AID }, null)<br />
                @partner.Street<br />
//this is what i cannot figure out!!
                @if(!string.IsNullOrEmpty(partner.Phone))
                    {
                        @partner.Phone@:<br />
                    }
                @partner.Distance<br />
            </li>
        }
    }

我在嵌套块(if(前面加上@符号。 然后标记
我不得不用 @: 然后它起作用了。

似乎昨天当我尝试使用嵌套的剃刀代码块时,我遇到了编译器错误,因为我在它前面加上了一个@。 所以现在我比以往任何时候都更加困惑。

事实上。。。如果我试图包围我的@partner。带有这样的报价的电话... "@partner.Phone"@:</ br> 我收到另一个编译器错误。剃刀在工作时很棒,但当它不起作用时,它非常令人困惑。

赛斯

在 Mvc 3 剃须刀视图中,基于模型中的 Null 有条件地呈现 html 的最佳方法是什么

不要做内联 if。

@if(!string.IsNullOrEmpty(Model.CustomerUrl))
{
    <a href="@Model.CustomerUrl">Click me</a>
}

"说够了

 @if (Model.Count() > 0)
 {

大概在这一行之前,你已经显示了html,所以为了向剃刀表示你正在使用代码,你需要@符号。

    foreach (var partner in Model)
    {

您已经在代码块中,因此 @ 符号在这里不起作用。

        <li>

通过使用 html 标记,razor 意识到您再次显示 HTML。此处的所有内容均假定为 HTML。如果你想告诉 Razor 你这里有代码,你需要使用 @ 符号来表示代码。

            @if(!string.IsNullOrEmpty(partner.Phone))
            {
                @partner.Phone@:<br />
            }

这是正确的,因为您需要告诉 Razor 您正在再次使用代码。请注意,如果这是 IF 直接位于列表标记的正上方,则不会在此处使用 @ 符号,因为当您已经在代码中时,您不会使用 @ 符号。

"@partner。电话"由于同样的原因不起作用

if(something)
    ""

在 C# 中不起作用。您是在代码中创建对象而不使用它。

希望这有助于解释它。

您可以在互联网上找到的有关条件输出和视图的建议之一是,不应将两者混合在一起。如果您需要根据某些条件显示某些内容,则应创建一个 HTML 帮助程序。但是,为了回答您的问题,您可以做什么(如果您不想打扰助手(是这样的:

@if (!String.IsNullOrWhitespace(Model.CustomerUrl))
{
    <p class="customerLink links">
        <a href="@Model.CustomerUrl">@Model.CustomerName</a>
    </p>
}