15

他のコントローラーのアクションにリダイレクトしたいのですが、うまくいきません ProductManagerController のコードは次のとおりです。

[HttpPost]
public ActionResult RedirectToImages(int id)
{
    return RedirectToAction("Index","ProductImageManeger", new   { id=id   });
}

そしてこれは私のProductImageManagerControllerにあります:

[HttpGet]
public ViewResult Index(int id)
{
    return View("Index",_db.ProductImages.Where(rs=>rs.ProductId == id).ToList());
}

パラメータなしでProductImageManager/Indexにリダイレクトしますが(エラーはありません)、上記のコードでは次のようになります:

パラメーター ディクショナリには、'...Controllers.ProductImageManagerController' のメソッド 'System.Web.Mvc.ViewResult Index(Int32)' の null 非許容型 'System.Int32' のパラメーター 'ID' の null エントリが含まれています。オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。パラメータ名: パラメータ

4

4 に答える 4

22

このエラーは非常に説明的ではありませんが、ここで重要なのは「ID」が大文字であることです。これは、ルートが正しく設定されていないことを示しています。アプリケーションが ID を持つ URL を処理できるようにするには、少なくとも 1 つのルートが構成されていることを確認する必要があります。これは、 App_StartフォルダーにあるRouteConfig.csで行います。最も一般的なのは、id を省略可能なパラメータとしてデフォルト ルートに追加することです。

public static void RegisterRoutes(RouteCollection routes)
{
    //adding the {id} and setting is as optional so that you do not need to use it for every action
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

これで、設定した方法でコントローラーにリダイレクトできるはずです。

[HttpPost]
public ActionResult RedirectToImages(int id)
{
    return RedirectToAction("Index","ProductImageManager", new { id });

    //if the action is in the same controller, you can omit the controller:
    //RedirectToAction("Index", new { id });
}

1 回か 2 回、通常のリダイレクトでいくつかの問題に遭遇し、RouteValueDictionaryを渡すことによってそれを行うことに頼らなければなりませんでした。パラメータを使用した RedirectToAction の詳細

return RedirectToAction("Index", new RouteValueDictionary( 
    new { controller = "ProductImageManager", action = "Index", id = id } ) 
);

非常によく似たエラーが小文字の 'id'で発生する場合、これは通常、ルートが提供されていない id パラメータを予期している (id なしでルートを呼び出している/ProductImageManager/Index) ためです。詳細については、この質問を参照してください。

于 2013-11-12T13:33:29.130 に答える
-2

これを試して、

return RedirectToAction("ActionEventName", "Controller", new { ID = model.ID, SiteID = model.SiteID });

ここで、複数の値またはモデルも渡していることに言及します。そのため、ここで言及します。

于 2013-11-12T13:10:12.743 に答える