我创建了一个MVC应用程序,它使用多个实体使用ViewBag填充视图以传递数据。
但是我似乎无法从ViewBag中获取Kendo UI网格,并且我不断收到以下运行时错误:
CS0452: The type 'System.Collections.Generic.KeyValuePair<string,string>' must be a reference type in order to use it as parameter 'T' in the generic type or method 'Kendo.Mvc.UI.Fluent.WidgetFactory.Grid<T>(System.Collections.Generic.IEnumerable<T>)'
我相信我遇到的问题来自这行代码:
@(Html.Kendo().Grid((Dictionary<string,string>)ViewBag.ApplicationStatuses)
完整的Razor代码如下:
@{
ViewBag.Title = "TestView";
}
<h2>TestView</h2>
@(Html.Kendo().Grid((Dictionary<string,string>)ViewBag.ApplicationStatuses).Name("UserDetails").Columns(c =>
{
c.Bound(ud => ud.FullName);
c.Bound(ud => ud.JobTitle);
c.Bound(ud => ud.Department);
c.Bound(ud => ud.Email);
c.Template(
@<text>
@Html.ActionLink("User Details", "UserDetails", "User", new { userName = item.UserName }, null)
</text>
);
})
)
我的控制器:
public ActionResult TestView(string userName)
{
Dictionary<string, string> statuses = new Dictionary<string, string>();
foreach (KeyValuePair<Application.Applications, IUser> entry in Application.UserMap)
{
IUser user = entry.Value;
statuses.Add(entry.Key.ToString(), entry.Value.GetUserStatus(userName));
}
ViewBag.ApplicationStatuses = statuses;
ViewBag.UserName = userName;
return View();
}
有人可以向我解释为什么我遇到这个问题以及解决方案是什么?
非常感谢任何帮助。
答案 0 :(得分:1)
对于迟到的回答感到抱歉,但我通过更改程序的逻辑并使用模型来解决这个问题。这填充了网格,让我更容易控制验证。感谢您的耐心等待。
答案 1 :(得分:0)
首先,完成了使用ViewBag。创建强类型视图模型请参阅此http://www.asp.net/mvc/tutorials/views/dynamic-v-strongly-typed-views
你不能像这样将字典绑定到剑道