首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >HTML : ASP.NET中的条件属性

HTML : ASP.NET中的条件属性
EN

Stack Overflow用户
提问于 2012-02-23 01:07:37
回答 5查看 115.7K关注 0票数 90

下面的代码看起来并不干净。有什么改进代码的建议吗?

代码语言:javascript
复制
<li @if(ViewData["pagename"].ToString()=="Business details"){ <text>class="active" </text> } >
        <a  @if(ViewData["pagename"].ToString()=="Business details"){ <text>style="color: white; background-color: #08C; border: 1px solid #08C;" </text> }
            href="@Url.Action("BusinessDetails", "Business")">Business Details</a>
    </li> 
    <li @if (ViewData["pagename"].ToString() == "Booking policies"){ <text>class="active"</text> }> 
        <a  @if (ViewData["pagename"].ToString() == "Booking policies")
               { <text>style="color: white; background-color: #08C; border: 1px solid #08C;" </text> }
            href="@Url.Action("BookingPolicies", "Business")">Booking policies</a> 
    </li> 
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-23 01:20:37

MVC具有内置的条件属性...

代码语言:javascript
复制
<div @{if (myClass != null) { <text>class="@myClass"</text> } }>Content</div>
<div class="@myClass">Content</div>

如果@myClass为null,则根本不会使用该属性...

我知道这可能不能完全解决您当前的问题,但它值得注意!

http://weblogs.asp.net/jgalloway/archive/2012/02/16/asp-net-4-beta-released.aspx

票数 160
EN

Stack Overflow用户

发布于 2012-02-23 01:10:04

代码语言:javascript
复制
<li class="@(ViewBag.pagename == "Business details" ? "active" : null)">  

您应该将内联style="..."替换为单独的类名,并在其中使用相同的语法。

但是,创建一个单独的HTML helper扩展方法会更简洁,该方法接受页面和操作名称并生成HTML。

票数 79
EN

Stack Overflow用户

发布于 2014-04-10 04:30:27

我使用了一个小帮助器方法,如果值非空,并且如果定义了布尔函数表达式,则当布尔函数表达式的计算结果为true时,该方法将有条件地添加属性

代码语言:javascript
复制
public static MvcHtmlString Attr(this HtmlHelper helper, string name, string value, Func<bool> condition = null)
{
    if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(value))
    {
        return MvcHtmlString.Empty;
    }

    var render = condition != null ? condition() : true;

    return render ? 
        new MvcHtmlString(string.Format("{0}=\"{1}\"", name, HttpUtility.HtmlAttributeEncode(value))) : 
        MvcHtmlString.Empty;
}

定义完成后,我可以在我的Razor视图中使用此方法:

代码语言:javascript
复制
<li @(Html.Attr("class", "new", () => example.isNew))>
...
</li>

如果为example.isNew == true,则上面的代码将呈现<li class="new">...</li>,否则将忽略整个class属性。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9399531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档