C# 在MVC3Razor视图中,基于模型中的空值有条件地呈现html的最佳方式是什么
我相信这是一个简单的问题,但我很难弄清楚这一点 我想做这样的事C# 在MVC3Razor视图中,基于模型中的空值有条件地呈现html的最佳方式是什么,c#,asp.net,asp.net-mvc,asp.net-mvc-3,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Razor,我相信这是一个简单的问题,但我很难弄清楚这一点 我想做这样的事 @(string.IsNullOrEmpty(Model.CustomerUrl)?“”: 这段代码不起作用 html与razor语法的混合,以及在标记属性中包含引号,这让人很难理解 我喜欢剃须刀,除了弄明白这种东西真的会把我绊倒 如果CustomerUrl为null或空,我希望根本不呈现以下内容 <p class="customerLink links"><a href="@Model.CustomerUrl"
@(string.IsNullOrEmpty(Model.CustomerUrl)?“”:
这段代码不起作用
html与razor语法的混合,以及在标记属性中包含引号,这让人很难理解
我喜欢剃须刀,除了弄明白这种东西真的会把我绊倒
如果CustomerUrl为null或空,我希望根本不呈现以下内容
<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(Model.Count()>0)
{
foreach(模型中的var合作伙伴)
{
@ActionLink(@partner.CustomerName,“详细信息”,“客户”,新的{id=Customer.AID},空)
@partner.Street
//这是我无法理解的!!
@如果(!string.IsNullOrEmpty(partner.Phone))
{
@合作伙伴。电话@
}
@伙伴距离
}
}
我在嵌套块(if)前面加了@符号。然后,标记我必须用@来界定:然后它就起作用了 似乎昨天当我试图使用嵌套的razor代码块时,我遇到了一个编译器错误,因为我在它前面加了@。所以现在我比以前更困惑了 事实上…如果我试着用这样的引语围绕我的@partner.Phone<代码>“@partner.Phone”@:我收到另一个编译器错误。剃须刀是伟大的,当它工作,但当它不它是非常混乱 赛斯不要做内联if
@if(!string.IsNullOrEmpty(Model.CustomerUrl))
{
<a href="@Model.CustomerUrl">Click me</a>
}
@if(!string.IsNullOrEmpty(Model.CustomerUrl))
{
}
努夫说,你会在互联网上找到一条关于条件输出和观点的建议,那就是不应该把两者混为一谈。如果您需要根据某些条件显示某些内容,那么您应该创建一个HTML帮助器。但是,为了回答您的问题,您可以这样做(如果您不想麻烦助手):
@if (!String.IsNullOrWhitespace(Model.CustomerUrl))
{
<p class="customerLink links">
<a href="@Model.CustomerUrl">@Model.CustomerName</a>
</p>
}
@if(!String.IsNullOrWhitespace(Model.CustomerUrl))
{
}
大概在这一行之前,您有html显示,所以要向razor表示您正在使用代码,您需要@符号
foreach (var partner in Model)
{
您已经在一个代码块中,因此@符号在这里不起作用
<li>
在C#中不起作用。您正在代码中创建一个对象,而不使用它
希望这有助于解释。我编辑了我的问题。你能再看一下吗。如果它已经在一个razor代码块中了呢?我现在才看到,几个月后。这也适用于razor代码块。只需从if语句中删除@。我不确定您是否建议不使用所显示的代码,是否批评它为“内联if”,或者您是否建议所显示的代码实际上是正确的方式。。。“inline if”在其他地方,您可以使用显示的代码。如果那个OP建议的话,原来的内联是行不通的。内联if是(bool?true:false)语法。我在这里说的是,只要在if之前删除前面的@符号,我给出的“if”块语句就可以在另一个代码块中工作。一步一步地解释这一点非常好!对于新手来说,我认为这可能非常有用。我希望有更多的代码片段,包括这样的评论。
foreach (var partner in Model)
{
<li>
@if(!string.IsNullOrEmpty(partner.Phone))
{
@partner.Phone@:<br />
}
if(something)
""