5

我确信这是一个简单的问题,但我无法弄清楚这一点。

我想做这样的事情......

@(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.Phone......"@partner.Phone"@:</ br>我会得到另一个编译器错误。Razor 在工作时很棒,但当它不工作时会很混乱。

赛斯

4

3 回答 3

15

如果不做内联。

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

'纳夫说

于 2012-05-04T14:26:32.440 回答
4
 @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.Phone”出于同样的原因不起作用

if(something)
    ""

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

希望这有助于解释它。

于 2012-05-04T17:16:36.890 回答
2

您会在 Internet 上找到关于条件输出和 View 的建议之一,即不应将两者混在一起。如果您需要根据某些条件显示某些内容,那么您应该创建一个 HTML Helper。但是,为了回答您的问题,您可以做什么(如果您不想打扰助手)是这样的:

@if (!String.IsNullOrWhitespace(Model.CustomerUrl))
{
    <p class="customerLink links">
        <a href="@Model.CustomerUrl">@Model.CustomerName</a>
    </p>
}
于 2012-05-04T14:30:03.130 回答