T4MVC - 处理可选参数

时间:2011-04-17 19:35:24

标签: c# asp.net-mvc 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")时,我得到一个“方法没有重载'索引'取'1'参数”异常。但是,调用MVC.Products.Index()可以正常工作。

我不应该省略“page”参数,因为它默认为'1'吗?

注意:我已尝试将路由中的页面参数默认为1,但无法正常工作。

注2:还尝试[Optional] Attribute但没有成功。

3 个答案:

答案 0 :(得分:5)

虽然你弄清楚了错误的C#版本的问题,但为了将来的参考,有一种方法可以做到这一点。你可以写:

MVC.Products.Index().AddRouteValue("id", "anything");

除了方法调用传入的内容之外,还可以添加单个参数的值。

答案 1 :(得分:0)

只需使你的int可以为空即可。

public virtual ActionResult Index(string id, int? page = 1)

答案 2 :(得分:0)

正如我在上面对Kirk Woll的回答中所说,显然是optional parameters aren't supported in C# 3.0

我通过创建重载并使用NonAction Attribute

解决了这个问题
[NonAction]
public ActionResult Index(string id)
{
    return Index(id, 1);
}

然后MVC.Products.Index(“foo”)的工作方式就像魅力,任何C#版本。