无法使用ViewBag而不是模型填充Kendo网格

时间:2014-10-01 08:18:46

标签: c# asp.net-mvc kendo-grid viewbag

我创建了一个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();
    }

有人可以向我解释为什么我遇到这个问题以及解决方案是什么?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

对于迟到的回答感到抱歉,但我通过更改程序的逻辑并使用模型来解决这个问题。这填充了网格,让我更容易控制验证。感谢您的耐心等待。

答案 1 :(得分:0)

首先,完成了使用ViewBag。创建强类型视图模型请参阅此http://www.asp.net/mvc/tutorials/views/dynamic-v-strongly-typed-views

你不能像这样将字典绑定到剑道