0

私はasp.net MVCでDurandalJsフレームワークを使い始めました。それは完璧に機能しています。

しかし今、durandal のビューとして .cshtml ファイルを使用する必要があります。だから私はルートweb.configに追加しました

<add key="webpages:Enabled" value="true" /> 

しかし、DurandalJs は依然として .html ファイルをビューとして取得しようとします。

そこで、viewEngine.js ファイルを修正します。

    return {
    viewExtension: '.cshtml',
    viewPlugin: 'text',

しかし現在、DurandalJs では、すべてのビュー ファイルに ".cshtml" 拡張子を付ける必要があります。

「.html」ファイルと「.cshtml」ファイルを一緒に使用できますか?

4

3 に答える 3

2

main.js に次の行を追加しました。

viewLocator.useConvention('viewmodels', 'ViewsProxy/GetView?name=', 'ViewsProxy/GetView?name=');

以下のように ViewsProxyController を実装しました。

public class ViewsProxyController : Controller
{
    public ActionResult GetView(string name)
    {
        string viewRelativePath = GetRelativePath(name);
        string viewAbsolutePath = HttpContext.Server.MapPath(viewRelativePath);

        if (!System.IO.File.Exists(viewAbsolutePath))
        {
            viewAbsolutePath = ReplaceHtmlWithCshtml(viewAbsolutePath);
            if (System.IO.File.Exists(viewAbsolutePath))
            {
                System.Web.HttpContext.Current.Cache.SetIsHtmlView(name, false);
                viewRelativePath = ReplaceHtmlWithCshtml(viewRelativePath);
                return PartialView(viewRelativePath);
            }
            throw new FileNotFoundException();
        }

        FilePathResult filePathResult = new FilePathResult(viewAbsolutePath, "text/html");
        return filePathResult;
    }

    private string ReplaceHtmlWithCshtml(string path)
    {
        string result = Regex.Replace(path, @"\.html$", ".cshtml");
        return result;
    }

    private string GetRelativePath(string name)
    {
        string result = string.Format("{0}{1}", AppConfigManager.DurandalViewsFolder, name);
        return result;
    }
}

durandal アプリケーションは .html と .cshtml で動作するようになりました。

于 2013-04-03T13:19:59.380 に答える
1

MVC ルートの拡張子として cshtml を受け入れるようにルートを変更する必要があります。

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}.cshtml",
    defaults: new { controller = "Home", action = "Index", namespaces: new string[] { "PAWS.Web.Controllers" }
);

また、アプリケーション プールがクラシックではなく統合されていることを確認する必要があります。

しかし、これを行うことはお勧めしません。サーバーに HTML をレンダリングさせないようにしてください。その理由はここで説明されています

于 2013-03-22T13:38:55.580 に答える