使用WebForms视图引擎,我通常会使用三元运算符来处理非常简单的条件,特别是在HTML属性中.例如:
<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
Run Code Online (Sandbox Code Playgroud)
上面的代码将为<a>标记提供一个类auth或anon取决于用户是否经过身份验证.
Razor视图引擎的等效语法是什么?因为Razor需要HTML标签来"知道"何时跳入和跳出代码和标记,所以我现在仍然坚持以下内容:
@if(User.Identity.IsAuthenticated) { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }
Run Code Online (Sandbox Code Playgroud)
温和地说,这很可怕.
我很想做一些喜欢这一点,但我在努力了解如何在剃刀:
<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>
Run Code Online (Sandbox Code Playgroud)
-
更新:
与此同时,我创建了这个HtmlHelper:
public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}
Run Code Online (Sandbox Code Playgroud)
这可以从Razor这样调用:
<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>
Run Code Online (Sandbox Code Playgroud)
尽管如此,我希望有一种方法可以使用三元运算符而不会退回到扩展方法中.
我想仅在某些property(Model.ReadOnly)是的时候定义此部分false.
@section toolbar {
<div class="tool">
<div class="row">
@Html.ActionLink( Resources.Strings.Edit, "Edit", "Profile" )
</div>
<div class="row">
@Html.ActionLink( Resources.Strings.Delete, "Delete", "Profile" )
</div>
</div >
}
Run Code Online (Sandbox Code Playgroud)
我试着把它包起来,@if ( !Model.ReadOnly ) {}但它不起作用.
有没有办法做到这一点?
我不想定义一个空的部分(如@itsmatt建议的那样),我的页面布局会改变是否定义了部分(使用IsSectionDefined( "toolbar" )).
我试图在表格中显示一些行.根据UserGroup,View应显示不同的标记.管理员可以删除行,但主持人只能将其标记为可见或不可见.
如何在Razor中写一个正确的if else语句?
页面显示正确,但页面标题为Parse Error
这是我的代码:
@model MvcApplication3.Models.ViewModels.New.Question.MatrixRows
@{
bool visible = Model.Visible;
}
<tr>
<td>
@if(visible)
{
@Html.TextBoxFor(cn => Model.Row_Number, new { @class = "row required digits", size = 1 })
}
@if (!visible)
{
@Html.TextBoxFor(cn => Model.Row_Number, new { @class = "row required digits", size = 1, disabled = "disabled" })
}
</td>
<td>
@if(visible)
{
@Html.TextBoxFor(bs => Model.Row_Description, new { @class = "rowdesc", size = 45 })
}
@if (!visible)
{
@Html.TextBoxFor(bs => Model.Row_Description, new { …Run Code Online (Sandbox Code Playgroud) 在Razor中,有一个奇怪的规则,即只允许在一个块内封闭 HTML if.
看到:
但我有一种情况,我想在某些条件下排除一些外部包裹元素.我不想重复所有内部HTML,这是相当数量的HTML和逻辑.
围绕这个问题的唯一方法是为内部的东西制作另一个部分视图以保持干燥吗?
没有任何其他重新使用这个新的部分,它感觉真的很尴尬,臃肿.我想知道这条规则是Razor的限制还是简单的纳米(烦人)功能.
多年来我一直被这个问题所困扰......(我正在研究ASP.NET MVC 3)
在这个链接 - Razor If/Else条件运算符语法 - 被认为是Razor引擎中条件表达式的唯一有效语法是@(x?y:z)
好的.现在,如何在此条件表达式中编写HTML?我不能在这里使用Razor,因为代码导致语法错误无效.
@(item.Manager == null ? @:<i>unassigned</i> : item.Manager.Name)
Run Code Online (Sandbox Code Playgroud)
经过一些研究后,我发现了HtmlWriter或Html.Raw但它们都没有,也没有它们的方法.toString()或.toHtmlString()有用,因为它们不是字符串而是IHtmlString类型.
谢谢你的答复!
我想做的很简单:
<td class="bold-and-caps">@{if (++i == 1) { subsec.Title } else { String.Empty } } </td>
Run Code Online (Sandbox Code Playgroud)
除了我得到
"只有赋值,调用,递增,递减,等待和新对象表达式才能用作语句"
在subsec.Title和String.Empty.
如何在Razor中编写"If condition,output X"类型语句?