TYR*_*AEL 6 c# asp.net-mvc c#-4.0 asp.net-mvc-3
如果我在Dynamic中有一个值ViewBag,为什么我不能将它传递给方法?所以为了简单起见,让我说我有ViewBag.SomeValue,并且我想传递ViewBag.SomeValue给HTML Helper.如果HTML帮助器接受动态变量,为什么不接受我的ViewBag.SomeValue?
@Html.SimpleHelper(ViewBag.SomeValue)
public static string SimpleHelper(this HtmlHelper html, dynamic dynamicString)
{
return string.Format("This is my dynamic string: {0}", dynamicString);
}
Run Code Online (Sandbox Code Playgroud)
正如错误消息所示,无法动态分派扩展方法.它在.NET中不受支持.它与ASP.NET MVC或Razor无关.尝试将扩展方法写入某种采用动态参数的类型,然后尝试调用此扩展方法,将其传递给动态变量,您将收到编译时错误.
请考虑以下控制台应用程序示例,其中说明了
public static class Extensions
{
public static void Foo(this object o, dynamic x)
{
}
}
class Program
{
static void Main()
{
dynamic x = "abc";
new object().Foo(x); // Compile time error here
}
}
Run Code Online (Sandbox Code Playgroud)
所以你需要施放:
@Html.SimpleHelper((string)ViewBag.SomeValue)
Run Code Online (Sandbox Code Playgroud)
实际上,正如Adam所说,你需要使用强类型视图模型,而不要使用ViewBag.这只是为什么不应该使用ViewBag的数百万个原因之一.