Asp.net mvc 检查Viewbag属性是否为空,并在视图中使用默认值

Asp.net mvc 检查Viewbag属性是否为空,并在视图中使用默认值,asp.net-mvc,asp.net-mvc-3,razor,Asp.net Mvc,Asp.net Mvc 3,Razor,我在MVC视图中有这段代码,它可以工作,但是为了实现这个简单的事情,它像很多代码一样。有什么办法可以提高效率吗 @if (string.IsNullOrEmpty(ViewBag.Name)) { @:  } else { @:ViewBag.Name } 有什么办法可以提高效率吗 @if (string.IsNullOrEmpty(ViewBag.Name)) { @:  } else { @:ViewBag.Name } 是的,

我在MVC视图中有这段代码,它可以工作,但是为了实现这个简单的事情,它像很多代码一样。有什么办法可以提高效率吗

@if (string.IsNullOrEmpty(ViewBag.Name))
{
 @:     
}
else
{
 @:ViewBag.Name
}
有什么办法可以提高效率吗

@if (string.IsNullOrEmpty(ViewBag.Name))
{
 @:     
}
else
{
 @:ViewBag.Name
}
是的,当然,使用视图模型并摆脱
ViewBag

public string FormattedName
{
    get { return string.IsNullOrEmpty(this.Name) ? " " : this.Name; }
}
然后在强类型视图中:

@Html.DisplayFor(x => x.FormattedName)
或者,如果您愿意:

@Model.FormattedName
另一种可能是编写自定义帮助器:

public static class HtmlExtensions
{
    public static IHtmlString Format(this HtmlHelper html, string data)
    {
        if (string.IsNullOrEmpty(data))
        {
            return new HtmlString(" ");
        }

        return html.Encode(name);
    }
}
在你看来:

@Html.Format(Model.Name)
或者,如果需要保留ViewCrap,则必须使用强制转换(抱歉,.NET不支持动态参数上的扩展方法分派):


我认为
dynamic
通常被过度使用。我必须在我的回答中警告一件事。如果ViewBag.Name为“”,则输出为“”,而不是“”。这是因为??运算符仅适用于空字符串,而不适用于空字符串。
@(ViewBag.Name ?? Html.Raw(" "))