1

新しい MVC 4 プロジェクトを作成し、Database First を使用して EDO.NET Entity Data Model を追加しました。正確な理由はわかりませんが、以前のように正しく機能していないようです。エンティティ クラスを生成するには、EF コード生成項目を手動で追加する必要がありました。

とにかく、私が抱えている主な問題は、デフォルトのルーティングが無視されているように見えることです。私のルート構成はデフォルトで、次のとおりです。

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

ただし、[LOCALHOST]/Properties/ は /Properties/Index を見つけられず、「/」アプリケーションで 404 サーバー エラーを返すだけです。リソースが見つかりません。

ばかげた間違いを犯したり、重要なことを忘れたりしたことは忘れませんが、StackOverflow とインターウェブで同様の問題を検索しましたが、解決策はどれも役に立ちません。誰かが理由を知っていれば、正しい方向への製品に感謝します。

リクエストされた編集:

私は3つのコントローラーを持っています:

  1. ホーム - 手付かず
  2. アカウント - 手付かず
  3. プロパティ - デフォルトの MVC CRUD アクション (インデックス、詳細、作成、編集) 付き

IIS でホストされている場合は正常に動作しますが、VS の内部デバッグ IIS では動作しません。

@Html.ActionLink("Properties", "Index", "Properties") は、実行時に http://[localhost]:53909/Properties を生成します。ただし、生成されたリンクをクリックすると、「「/」アプリケーションでサーバー エラーが発生しました。リソースが見つかりません」というメッセージが表示されます。

PropertiesController.cs (Index アクションのみ)

public class PropertiesController : Controller
{
    private PropertyInfoEntities db = new PropertyInfoEntities();

    //
    // GET: /Properties/

    public ActionResult Index()
    {
        //Mapper.CreateMap<Property, PropertiesListViewModel>()
            //.ForMember(vm => vm.MainImageURL, m => m.MapFrom(u => (u.MainImageURL != null) ? u.MainImageURL : "User" + u.ID.ToString()))
        //    ;
        //List<PropertiesListViewModel> properties =
        //    Mapper.Map<List<Property>, List<PropertiesListViewModel>>(db.Properties.ToList());
        return View(db.Properties.Include(p => p.Currency).Include(p => p.Type).Include(p => p.Province).Include(p => p.Region).Include(p => p.SaleType).Include(p => p.Source).Include(p => p.Town).ToList());
    }
}

_Layout.cshtml

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title - My ASP.NET MVC Application</title>
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
    <meta name="viewport" content="width=device-width" />
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    <header>
        <div class="content-wrapper">
            <div class="float-left">
                <p class="site-title">@Html.ActionLink("your logo here", "Index", "Home")</p>
            </div>
            <div class="float-right">
                <section id="login">
                    @Html.Partial("_LoginPartial")
                </section>
                <nav>
                    <ul id="menu">
                        <li>@Html.ActionLink("Home", "Index", "Home")</li>
                        <li>@Html.ActionLink("About", "About", "Home")</li>
                        <li>@Html.ActionLink("Properties", "Index", "Properties")</li>
                        <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
                    </ul>
                </nav>
            </div>
        </div>
    </header>
....

編集 2: 特定のルートを使用しても無視されます

namespace ProjectName
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Properties",
                "Properties/{action}/{id}",
                new { controller = "Properties", action = "Index", id = UrlParameter.Optional }
            );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

乾杯!

4

5 に答える 5

3

PropertiesController の名前を Properties1Controller に変更してみましたが、ルーティングは完全に正常に機能しました。さらに掘り下げた後、それは Properties が Windows Reserved Keyword であるためであることがわかりました。

とにかく、問題の解決策:予約済みのキーワードをコントローラー名として使用しないでください。

奇妙なことに、/Properties/Index のルーティングは完全に正常に機能し、/Properties/ のルーティングは、開発用ではなく、運用 IIS で完全に正常に機能します。これにより、問題を解決するのがはるかに困難になりましたが、最終的にはそこにたどり着きました。

ご協力いただきありがとうございます。

于 2013-11-06T10:19:55.870 に答える
1

プロパティ コントローラーの名前空間は "ProjectNamespace.Controllers" 規則と一致していますか? 別のソースからコードをコピーした場合、コントローラー クラスの名前空間を変更するのを忘れている可能性があります。

于 2013-11-04T14:39:27.647 に答える