2012-07-18 80 views
0

我正在研究一个ASP.NET MVC3应用程序,我想从视图调用控制器并将该信息存储为字典。在字典中存储Html.Action调用的结果? (ASP.NET MVC 3)

控制器代码:

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的是类型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' 

EDIT 2

这些都是致使铸件的字典附带的错误:

Url.Action("foo").ToDictionary<string,int>();出于显而易见的原因返回CS1501: No overload for method 'ToDictionary' takes 0 arguments,但VS2010调试程序可识别即结果为字典:

Bug 1

但是,当我添加参数(Url.Action("foo").ToDictionary<string,int>(x=>x);)时,它会停止识别它是字典,但我不确定这些参数是否正确(它基于我发现的here

Bug 2

+0

为什么你想从视图调用控制器来获取字典?你试图达到什么目的?我觉得你正试图以完全错误的方式实现某些目标。 – VJAI 2012-07-18 13:23:08

+0

上面的代码大大简化了故障排除。它背后的想法是,视图从滑块获取值并将其传递给控制器​​,控制器重新计算并更新视图上的几个分数。有一个重要的计算要求,所以我宁愿让它在服务器上运行,而不是在本地实例上运行。 – ahollenbach 2012-07-18 13:33:44

回答

1

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

+0

感谢您的洞察力。 – ahollenbach 2012-07-18 14:32:18

相关问题