3

私は.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()ただし、呼び出しは機能します。

「ページ」パラメーターはデフォルトで「1」に設定されているため、省略できませんか?

注:ルートで page パラメータをデフォルトの 1 に設定しようとしましたが、うまくいきませんでした。

注 2: [Optional] 属性も試してみましたが、成功しませんでした。

4

3 に答える 3

5

間違った C# バージョンの問題を理解しましたが、今後の参考のために、これを行う方法があります。あなたは書ける:

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

これにより、メソッド呼び出しが渡すものに加えて、個々のパラメーターの値を追加できます。

于 2011-04-18T04:22:00.757 に答える
0

int を nullable にするだけで機能します。

public virtual ActionResult Index(string id, int? page = 1)
于 2011-04-17T21:16:35.503 に答える
0

上記の Kirk Woll への返信で述べたように、オプションのパラメーターは C# 3.0 ではサポートされていないようです。

オーバーロードを作成し、 NonAction Attributeを使用して問題を解決しました。

[NonAction]
public ActionResult Index(string id)
{
    return Index(id, 1);
}

次に、 MVC.Products.Index("foo") は、どの C# バージョンでも魅力的に機能します。

于 2011-04-19T18:34:39.200 に答える