相关疑难解决方法(0)

如何在剃刀中使用三元运算符(特别是在HTML属性上)?

使用WebForms视图引擎,我通常会使用三元运算符来处理非常简单的条件,特别是在HTML属性中.例如:

<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>
Run Code Online (Sandbox Code Playgroud)

上面的代码将为<a>标记提供一个类authanon取决于用户是否经过身份验证.

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)

尽管如此,我希望有一种方法可以使用三元运算符而不会退回到扩展方法中.

razor asp.net-mvc-3

387
推荐指数
5
解决办法
16万
查看次数

条件ASP.NET MVC剃刀部分

我想仅在某些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" )).

asp.net-mvc razor asp.net-mvc-3

23
推荐指数
1
解决办法
2万
查看次数

如何在Razor中创建else if语句?

我试图在表格中显示一些行.根据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 asp.net-mvc-3

20
推荐指数
3
解决办法
8万
查看次数

Razor语法 - 如何有条件地包装一些内部HTML

在Razor中,有一个奇怪的规则,即只允许在一个块内封闭 HTML if.

看到:

Razor不理解unclosed html标签

但我有一种情况,我想在某些条件下排除一些外部包裹元素.我不想重复所有内部HTML,这是相当数量的HTML和逻辑.

围绕这个问题的唯一方法是为内部的东西制作另一个部分视图以保持干燥吗?

没有任何其他重新使用这个新的部分,它感觉真的很尴尬,臃肿.我想知道这条规则是Razor的限制还是简单的纳米(烦人)功能.

html asp.net-mvc razor

17
推荐指数
2
解决办法
7185
查看次数

ASP.NET MVC 3使用Razor - 将条件表达式与HTML输出一起使用

多年来我一直被这个问题所困扰......(我正在研究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类型.

谢谢你的答复!

asp.net-mvc razor asp.net-mvc-3

7
推荐指数
1
解决办法
5177
查看次数

如何使用Razor语法有条件地输出HTML?

我想做的很简单:

<td class="bold-and-caps">@{if (++i == 1) { subsec.Title } else { String.Empty } } </td>
Run Code Online (Sandbox Code Playgroud)

除了我得到

"只有赋值,调用,递增,递减,等待和新对象表达式才能用作语句"

subsec.TitleString.Empty.

如何在Razor中编写"If condition,output X"类型语句?

html c# asp.net asp.net-mvc razor

0
推荐指数
1
解决办法
5282
查看次数

标签 统计

razor ×6

asp.net-mvc ×4

asp.net-mvc-3 ×4

html ×2

asp.net ×1

c# ×1