我在@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?
答案 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)