0

ASP.NET WebフォームAPPを持っていますが、一度にASP.NETMVCに移行したいと思います。Webformsアプリ内で実行するようにMVCをセットアップしました。ASP.NET MVCフォルダー(コントローラー、ビュー)をプロジェクトのMVCというサブフォルダーに配置し、グローバルasaxのルートを次のように設定すると、すべてが適切に設定されます。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
    routes.MapRoute("Default", // Route name
        "w/{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = "" } // Parameter defaults
    );
}

protected void Application_Start()
{
    RegisterRoutes(RouteTable.Routes);
}

すべての構成およびアセンブリ参照がセットアップされています。デバッグすると、HomeコントローラーのIndexメソッド内にあるブレークポイントに到達できます。

public class HomeController
    : Controller
{
    public ActionResult Index()
    {
        this.HttpContext.Trace.Write("Hrm...");
        return View("index", (object)"Hello");
    }
}

発生している問題は

return View("index", (object)"Hello");

MVCがビューを見つけられない場合に通常予想されるエラーステータスコードまたは検索リストを返しません。代わりに、200 httpの応答があり、応答のコンテンツ本文には何もありません。

httpリクエストの詳細は次のとおりです。

GET http://localhost.:2396/w/home/index2 HTTP/1.1
Accept: */*
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MS-RTC LM 8; InfoPath.2; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: localhost.:2396
Pragma: no-cache
Cookie: ASP.NET_SessionId=3yqf2t55sckemhmxq2bhibmq

HTTP/1.1 200 OK
Server: ASP.NET Development Server/9.0.0.0
Date: Wed, 09 May 2012 12:42:43 GMT
X-AspNetMvc-Version: 2.0
Cache-Control: private
Content-Length: 0
Connection: Close

上記のリクエストはindex2に送られます。これは存在しないアクションであり、エラーは発生しません。インデックスアクションのViewResultが例外をスローしているのではないかと思いますが、どういうわけかどこかで抑制されています。私はこのコードベースを継承したので、何が起こっているのかを理解しようとしています。

web.configで、エラーメッセージを表示できるようにエラー処理を構成しましたが、それでもhttpステータスコードが常に200である理由は説明されていません。

<customErrors mode="Off"/>

<httpErrors errorMode="DetailedLocalOnly"/>

もう一つの簡単な注意は、私が交換した場合です

return View("index", (object)"Hello");

return Content("abc");

http応答のコンテンツ本文に「abc」を正しく出力します。

何か案は?

4

1 に答える 1

2

コントローラ、ビューは「MVC」というフォルダの下にあるとおっしゃっていたため、ビューの場所が間違っているようです。

「Views」フォルダは、ViewEngineがビューを検索する場所であるルートディレクトリの下にある必要があります。

更新: カスタムViewEngineを使用して、このデフォルトの動作をオーバーライドできます。その実装インターフェースのために、それはあなたが異なる場所をスキャンするためにあなた自身のロジックを実装することができるところIViewEngineと呼ばれるメソッドを持っています。FindView

于 2012-05-09T14:07:36.087 に答える