如何在.net core中将ViewData转换为String?

时间:2018-07-11 09:24:09

标签: asp.net-core .net-core asp.net-core-mvc asp.net-core-2.0

我在@ViewData [“ ShopURL”]中将字符串保存为viewdata

当我像这样在剃刀页面中渲染它时:

<a id="ShopA" href="@ViewData["ShopURL"]">123</a>


它运作良好。

现在,我要执行以下操作:如果ShopURL为null或为空,则ShopA将不会显示。
因此,我将代码编写如下:

@{
            string ShopViewData= ViewData["ShopURL"].ToString();;
            var ShopURL = "";
                if (!string.IsNullOrEmpty(ShopViewData))
                {
                    ShopURL = "<a id="ShopA" href='" + ShopViewData+ "'></a>";
                }
        }
        @Html.Raw(ShopURL)

问题是ShopViewData不返回@ViewData [“ ShopURL”]中的字符串,而是返回诸如“ Microsoft.AspNetCore.Mvc.Localization.LocalizedHtmlString”之类的奇怪内容。

那么,如何将ViewData转换为String?

1 个答案:

答案 0 :(得分:1)

为什么不只是简单地将锚包裹在IF中?

@{
    var shopUrl = ViewData["ShopURL"] as string;
}

@if (!string.IsNullOrEmpty(shopUrl))
{
    <a id="ShopA" href="@shopUrl">Go to shop</a>
}

编辑以更好地回答这个问题:您的代码有语法错误,并且您可能在空对象上调用ToString(),这将导致异常,一旦修复,此代码就可以在新的2.0 / 2.1项目中正常工作只要ViewData [“ ShopURL”]是从控制器传递的字符串

@{
    string ShopViewData = ViewData["ShopURL"]?.ToString();
    var ShopURL = "";
    if (!string.IsNullOrEmpty(ShopViewData))
    {
        ShopURL = $"<a id='ShopA' href='{ShopViewData}'>he</a>";
    }
}
@Html.Raw(ShopURL)

您的问题出在控制器中,您没有传入字符串,而是传入了LocalizedHtmlString类型的对象,如果要保留不能在该对象上调用ToString()的权限,将其转换为LocalizedHtmlString并获得其Value属性。

@{
    var ShopViewData = ViewData["ShopURL"] as LocalizedHtmlString;
    var ShopURL = "";
    if (ShopViewData != null)
    {
        ShopURL = $"<a id='ShopA' href='{ShopViewData.Value}'>he</a>";
    }
}
@Html.Raw(ShopURL)