T4MVC - 处理可选参数
我正在使用 .NET 3.5、MVC 2 和 T4MVC 2.6.42...
我有以下操作:
public virtual ActionResult Index(string id, int page = 1)
和以下路线:
routes.MapRoute(
"Products", // Route name
"Products/{id}", // URL with parameters
new { controller = "Products", action = "Index", id = UrlParameter.Optional, page = UrlParameter.Optional }, // Parameter defaults
new string[] { "Web.Controllers" }
);
但是当我尝试调用 MVC.Products.Index("anything") 我收到“方法‘Index’没有重载需要‘1’参数”异常。但是,调用
MVC.Products.Index()
是有效的。
我是否应该能够省略“page”参数,因为它默认为“1”?
注意:我尝试过将路由中的页面参数默认为 1,但没有成功。
注2:还尝试了[可选] 属性 未成功。
I'm using .NET 3.5, MVC 2 and T4MVC 2.6.42...
I have the following action:
public virtual ActionResult Index(string id, int page = 1)
And the following route:
routes.MapRoute(
"Products", // Route name
"Products/{id}", // URL with parameters
new { controller = "Products", action = "Index", id = UrlParameter.Optional, page = UrlParameter.Optional }, // Parameter defaults
new string[] { "Web.Controllers" }
);
But when I try to call MVC.Products.Index("anything")
I get a "No overload for method 'Index' takes '1' arguments" exception. Calling MVC.Products.Index()
, however, works.
Shouldn't I be able to omit the "page" parameter since it defaults to '1'?
Note: I've tried defaulting the page parameter to 1 in the route, didn't work.
Note 2: Also tried the [Optional] Attribute with no success.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
尽管您发现了错误的 C# 版本的问题,但为了将来的参考,有一种方法可以做到这一点。您可以这样写:
除了方法调用传入的值之外,您还可以添加单个参数的值。
Though you figured out the problem with the wrong C# version, for future reference there is a way of doing this. You can write:
This lets you add the value for individual param in addition to what the method call passes in.
只要让你的 int 可以为 null 就可以了。
Just make your int nullable and it will work.
就像我在上面对 Kirk Woll 的回复中所说,显然,C# 3.0 中不支持可选参数
我通过创建重载并使用 NonAction Attribute:
那么 MVC.Products.Index("foo") 就可以像一个魅力一样工作,与任何 C#版本。
Like I said in my response to Kirk Woll above, apparently, optional parameters aren't supported in C# 3.0
I solved the problem by creating an overload and using the NonAction Attribute:
Then MVC.Products.Index("foo") works like a charm, with any C# version.