7

このコードはMVCビューで機能しますが、この単純なことを実現するには、多くのコードのように継ぎ目があります。それをより効率的にする方法はありますか?

@if (string.IsNullOrEmpty(ViewBag.Name))
{
 @:     
}
else
{
 @:ViewBag.Name
}
4

2 に答える 2

17
@(ViewBag.Name ?? Html.Raw(" "))
于 2012-07-19T09:41:08.700 に答える
5

それをより効率的にする方法はありますか?

ええ、確かに、ビューモデルを使用して:を取り除き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は動的パラメーターでの拡張メソッドディスパッチをサポートしていません)。

@Html.Format((string)ViewBag.Name)
于 2012-07-19T07:43:54.353 に答える