0

ブラウザで URL に移動すると、このエラーが発生します。

localhost:10793/RealEstates/10

これは私のRouteConfigコードです:

    public class RouteConfig
    {
       public static void RegisterRoutes(RouteCollection routes)
       {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}",
            defaults: new { controller = "Main", action = "Index" }
        );
        routes.MapRoute(
            name: "RealEstates",
            url: "RealEstates/{action}",
            defaults: new { controller = "RealEstates", action = "Index" }
        );
        routes.MapRoute(
            name: "RealEstatesViewAd",
            url: "RealEstates/{id}",
            defaults: new { controller = "RealEstates", action = "ViewAd", id = UrlParameter.Optional }
        );
    }

}

私のエラー:

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

コードを次のように変更したとき:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        //routes.MapRoute(
        //    name: "Default",
        //    url: "{controller}/{action}",
        //    defaults: new { controller = "Main", action = "Index" }
        //);
        //routes.MapRoute(
        //    name: "RealEstates",
        //    url: "RealEstates/{action}",
        //    defaults: new { controller = "RealEstates", action = "Index" }
        //);
        routes.MapRoute(
            name: "RealEstatesViewAd",
            url: "RealEstates/{id}",
            defaults: new { controller = "RealEstates", action = "ViewAd", id = UrlParameter.Optional }
        );
    }

}

それは機能しますが、コントローラーで他のアクションを呼び出すと

ローカルホスト:10793/RealEstates/CreateAd

このエラーが見つかりました

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

そして、これは私のコントローラーです:

    namespace MvcAppliction1.Controllers
{    
    public class RealEstatesController : Controller
    {        
        public ActionResult Index()
        {
            return View();
        }
        public ActionResult ViewAd(int id)
        {
            return View();
        }
        public ActionResult CreateAd()
        {
            return View();
        }
    }
}
4

2 に答える 2

1

次のように変更する必要があります。

routes.MapRoute(
        name: "RealEstatesViewAd",
        url: "RealEstates/{action}/{id}",
        defaults: new { controller = "RealEstates", action = "ViewAd", id UrlParameter.Optional }
    );}}

ここを見てください。

http://msdn.microsoft.com/en-us/library/cc668201(v=vs.100).aspx

アップデート

これをコントローラーに追加します。

public ActionResult ViewAd(Int32 id)
{
    return View();
}

分かりますか

ローカルホスト:10793/RealEstates/10

は次のように翻訳されます。

ローカルホスト:10793/RealEstates/ViewAdd/10

そのため、コントローラーで it パラメーターを受け入れるそのメソッドが必要です。

于 2013-04-12T15:52:46.573 に答える
0

ルートで id をオプションとしてフラグ付けしました:

id = UrlParameter.Optional

しかし、あなたのコントローラーはnull可能ではないに違いない??

public ActionResult ViewAd(Int32 id)
{

}

そのため、ルートで許可されていても、id に null を投稿することはできません。これを次のように変更すると:

public ActionResult ViewAd(Int32? id)
{

}

次のエラー メッセージは表示されません。

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

于 2013-04-12T15:59:01.540 に答える