我正在编写一个自定义助手来处理嵌套导航菜单。将一组数组(或字典)传递给函数时遇到了一些麻烦。
以下是对ActionMenuItem的Razor调用
@Html.ActionMenuItem("All Reports", "index", "report", "icon-bar-chart", "last", new {"title" = "Report 1", "action" = "report1"}, new {"title" = "Report 2", "action" = "report2"})
public static MvcHtmlString ActionMenuItem(this HtmlHelper htmlHelper, String linkText, String actionName, String controllerName, String iconType = null, string classCustom = null, params Dictionary<string, string> subMenu)
我的功能很好,直到字典项目。 我能够生成单级菜单,但尝试使用嵌套菜单。
任何帮助和课程都非常感谢!
谢谢,
RD
答案 0 :(得分:1)
你可以这样做:
public static MvcHtmlString ActionMenuItem(
this HtmlHelper htmlHelper,
String linkText,
String actionName,
String controllerName,
String iconType = null,
string classCustom = null,
params KeyValuePair<string, string>[] subMenus)
{ ... }
var dict = new Dictionary<string, string>()
{
{ "a", "b" },
{ "c", "d" },
};
*.ActionMenuItem(*, *, *, *, *, dict.ToArray());
答案 1 :(得分:0)
您无法使用Dictionary<TKey, TValue>
关键字将params
声明为参数数组。
根据c#规范:
使用
params
修饰符声明的参数是参数数组。如果一个 形式参数列表包含一个参数数组,它必须是最后一个 列表中的参数和它必须是一维数组 型强>
Dictionary
不是一维数组。
您可以创建一个包含两个属性的类:Title
和Action
,并将参数类型更改为MyClass[]
而不是字典。
答案 2 :(得分:0)
尝试这样的事情:
@Html.ActionMenuItem(
"All Reports",
"index",
"report",
"icon-bar-chart",
"last",
new Dictionary<string, string>[]
{
new Dictionary<string, string>()
{
{ "title", "Report 1" },
{ "action", "report1" }
},
new Dictionary<string, string>()
{
{ "title", "Report 2" },
{ "action", "report2" }
}
} )
public static MvcHtmlString ActionMenuItem(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
string controllerName,
string iconType = null,
string classCustom = null,
params Dictionary<string, string>[] subMenu)