0

我正在开发一个 ASP.NET MVC3 应用程序,我想从视图调用控制器并将该信息存储为字典。

控制器代码:

public Dictionary<string,int> foo()
{
    Dictionary<string,int> bar = new Dictionary<string,int>();
    bar.Add("test",100);
    return bar;
}

查看代码:

@{ Dictionary<string,int> foobar = Html.Action("foo"); }
...
<div>@foobar["test"]</div>

如果我使用var foobar = Html.Action("foo");,我可以让视图工作,但它只是说 foobar 是 type System.Web.Mvc.MvcHtmlString,所以我不能用它做太多。

是否有任何我缺少的内置功能,或者我应该为此使用类似 JSON 结果的东西?

编辑:附加信息

还应该注意的是,在 VS2010 调试器中,它将 foobar 正确识别为{System.Collections.Generic.Dictionary'2[System.String,System.Int32]},所以问题是 foobar 没有正确解析。抛出的错误是:

Compiler Error Message: CS0021: Cannot apply indexing with [] 
to an expression of type 'System.Web.Mvc.MvcHtmlString'

编辑 2

这些是将结果转换为字典时出现的错误:

Url.Action("foo").ToDictionary<string,int>();出于明显的原因返回CS1501: No overload for method 'ToDictionary' takes 0 arguments,但 VS2010 调试器识别出结果是字典:

错误 1

但是当我添加参数 ( Url.Action("foo").ToDictionary<string,int>(x=>x);) 时,它会停止识别它是一个字典,尽管我不确定这些参数是否正确(它基于我在此处找到的内容。

错误 2

4

2 回答 2

1

你应该尽可能地让视图保持沉默。控制器必须将数据推送到视图。出于某种原因,如果您想调用一个执行复杂计算的函数,那么更好的主意是创建一个单独的静态类并将函数从控制器移动到该类。这Html.Action是完全不同的目的。您的控制器应始终返回操作结果,而不是字典或其他类型。

于 2012-07-18T14:18:12.317 回答
0

对 Html.Action("foo") 的调用应该返回一个字符串。这样做是调用一个将子视图呈现为字符串的操作方法。请参阅http://msdn.microsoft.com/en-us/library/ee721266

您可以调用静态实用程序方法,请参阅Is this an Extension or Helper Method in MVC3?

于 2012-07-18T13:22:42.877 回答