在 HTML.ActionLink 的 MVC Razor 视图中将字典转换为字符串

问题描述 投票:0回答:1

我有一个

Dictionary<string, string>
,其中包含用于
HTML.ActionLink
链接的键值。大多数
TKeys
是用户,但如果有一个
TValue
不为空,我想用它来代替。原因是,由于 UI 原因,某些单词比控制器操作名称效果更好,例如 GetUserProfile 更好地显示为 User Profile

Html.ActionLink 抛出错误:

CS1928:“System.Web.Mvc.HtmlHelper”不包含 “ActionLink”的定义和最佳扩展方法重载 'System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper, string, string, string, object, object)' 有一些无效参数

我很确定这是因为它看到的是

Dictionary<string,string>
类型而不是字符串类型。那么有没有办法将 Dictionary
TKey/TValue
转换为字符串类型来满足其要求呢?或者我不想以另一种方式完成同样的任务?

@{
  Dictionary<string, string> nav = new Dictionary<string, string>()    {{ "Email", "" }, { "Username", "" }, { "EditProfile", "Edit Profile" }}; 
}

@foreach (var navItem in nav)
{
  if (navItem.Value.IsEmpty())
  {        
        
    <li>
        @Html.ActionLink(navItem.Key, navItem, "ControllerName")
    </li>
   }
  else
   {
    <li>
        @Html.ActionLink(navItem.Value, navItem, "ControllerName")
    </li>
  }
}
c# asp.net asp.net-mvc razor
1个回答
0
投票

您将

ActionLink(HtmlHelper, String, String, String)
与第二个参数(在
HtmlHelper
之后计数,因为它是扩展方法)一起使用,需要
string
值。

当您向第二个参数提供

KeyValuePair<string, string>
的值时。我相信您想要的是将
navItem.Key
提供为
actionName

@foreach (var navItem in nav)
{
  if (navItem.Value.IsEmpty())
  {        
        
    <li>
        @Html.ActionLink(navItem.Key, navItem.Key, "ControllerName")
    </li>
   }
  else
   {
    <li>
        @Html.ActionLink(navItem.Value, navItem.Key, "ControllerName")
    </li>
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.