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

Dav*_* W. 7 asp.net-mvc razor asp.net-mvc-3

我在MVC视图中有这段代码可以工作,但它接口像很多代码来实现这个简单的事情.有什么方法可以提高效率?

@if (string.IsNullOrEmpty(ViewBag.Name))
{
 @:     
}
else
{
 @:ViewBag.Name
}
Run Code Online (Sandbox Code Playgroud)

VJA*_*JAI 17

@(ViewBag.Name ?? Html.Raw(" "))
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 5

有什么方法可以提高效率?

是的,使用视图模型并摆脱ViewBag:

public string FormattedName
{
    get { return string.IsNullOrEmpty(this.Name) ? " " : this.Name; }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的强类型视图中:

@Html.DisplayFor(x => x.FormattedName)
Run Code Online (Sandbox Code Playgroud)

或者如果您愿意:

@Model.FormattedName
Run Code Online (Sandbox Code Playgroud)

另一种可能性是编写自定义帮助程序:

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

        return html.Encode(name);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在你看来:

@Html.Format(Model.Name)
Run Code Online (Sandbox Code Playgroud)

或者如果您需要保留ViewCrap,您将不得不使用演员表(抱歉,.NET不支持动态参数的扩展方法调度):

@Html.Format((string)ViewBag.Name)
Run Code Online (Sandbox Code Playgroud)