在Mvc 3 razor中查看在模型中基于Null有条件地渲染html的最佳方法是什么

时间:2012-05-04 14:24:25

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

我确信这是一个简单的问题,但我无法解决这个问题。

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

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

此代码段不起作用。

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

我喜欢剃刀,除非弄清楚这种东西真的让我感到沮丧。

如果CustomerUrl为null或为空,我很乐意不呈现以下内容......

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

修改
这仍然不适合我...感谢你的建议。

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

编辑号码2 - 以下代码正在运行

    @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很棒,但是当它不起作用时它会很混乱。

赛斯

3 个答案:

答案 0 :(得分:15)

如果是,请不要进行内联。

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

'努夫赛义德

答案 1 :(得分: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直接在你的list标签之上,你就不会在这里使用@符号,因为你已经在代码中时不使用@符号。

“@ partner.Phone”因同样的原因无效

if(something)
    ""

无法在C#中运行。您正在代码中创建一个对象而不使用它。

希望有助于解释它。

答案 2 :(得分:2)

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

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