很多人都是在视图里面定义方法,然后再使用。我个人也是这么干的。但是为了验证是否可以将方法从控制器传递到视图,所以做了个测试。结果真的可以。原理是利用了委托(delegate),因为委托本身就是一种类型。既然是类型,那么就有实例。有了实例就可以作为View()方法的参数传递到视图。
下面贴代码:
ActionResult:
public delegate string MyDelegate(string content); public ActionResult DelegateTest() { MyDelegate myDelegate = (string content) => { return content; }; return View(myDelegate); }
视图:
<h2>DelegateTest</h2> @model MvcApplication1.Controllers.TestController.MyDelegate @Model("delegate test")
既然委托都可以了,那么C#内置的Func<>委托肯定也是可以的
ActionResult:
public ActionResult FunTest() { Func<string, string> myDelegate = (string content) => { return content; }; return View(myDelegate); }
视图:
<h2>FunTest</h2> @model System.Func<string, string> @Model("fun test")
使用Func<>或者Action<>委托的好处就是不需要再自定义委托类型了。
有人会说,你傻啊,定义一个类,在类里面写方法不就行了。可咱这只是纯为了验证是否能实现。