我确信这是一个简单的问题,但我无法解决这个问题。
我想做这样的事......
@(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很棒,但是当它不起作用时它会很混乱。
赛斯
答案 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>
}