4

App / viewsフォルダー内のすべてのビューがcshtmlではなく、htmlタイプであることに気付きました。かみそりなど、慣れ親しんだPartialViewsやmvc3を使用するにはどうすればよいですか?

4

3 に答える 3

11

Durandalは、完全に1ページ内に存在するアプリケーションを作成するために設計されています。これの利点は、デスクトップアプリケーションのようなユーザーエクスペリエンスです。また、これにより、アプリケーションをphonegapに簡単に移植して、ネイティブモバイルアプリケーションとして使用したり、appjsを使用してデスクトップアプリケーションに移植したりすることができます。

アプリケーション全体をhtml、js、およびcssファイルとして使用することで、アプリケーション全体を1つのファイルに圧縮/縮小/醜くして、サーバーにアプリケーション全体を提供させることができます。次に、アプリケーションはWebサービスを呼び出してデータを取得します。これは、MVCコントローラー、Web API、またはデータを返すWebサービスである可能性があります。このデータを使用してブラウザテンプレートにバインドし、表示するビューを生成します。

また、サーバーが複数のデュランダルSPAにサービスを提供できるハイブリッドアプリケーションを作成することもできます。これにより、単一のサイトでサービスを提供するアプリケーションのコレクションを作成できます。

MVCのバックグラウンドから多くの人が、HTMLにCSHTMLファイルを使用できない理由をよく尋ねています。簡単な答えはあなたができるということですが、これを行うことで多くの利益を失うことになります。サーバーにhtmlファイルをレンダリングさせると、htmlの生成をサーバーに依存しているため、アプリケーション全体を圧縮/縮小/醜くすることができなくなります。

cshtmlを好む場合、これは従来、ユーザーがURIを呼び出し、サーバーがデータに基づいてHTMLを生成し、レンダリングされたhtmlをユーザーに送り返し、画面のどこかに貼り付けるAJAXリッチアプリケーション用です。 。このプロセスでは、AJAXリッチサイトがありますが、SPAはありません。このアプリケーションをネイティブモバイルアプリケーションまたはデスクトップアプリケーションにすることはできなくなります。

于 2013-03-21T22:33:35.237 に答える
3

DurandalおよびKnockoutでRazor/CSHTMLを使用することに興味がある場合は、オープンソースオプションFluentKnockoutHelpersがあります。ASP.NET MVCの「優れたヘルパー」部分の多くを提供し、DurandalとKnockoutのすばらしい機能をほとんど問題なく使用できるようにします。

ミニファイ(など)に関するEvan Larsenの優れた点にすばやく対処するには:FluentKnockoutHelpersは実行時にロジックを実行せず、マークアップを生成するだけなので、人気のあるRazorEngineプロジェクトを使用して本番ビルド用の静的HTMLファイルを生成するのは非常に簡単です。 Razorを実行し、C#からHTMLを生成します。これは、Durandalの必要な本番ビルドステップの直前に実行できます(これにより、縮小などが可能になります)

一言で言えば、それはデュランダル/ノックアウト開発をASP.NETMVCと同じくらい簡単にするたくさんの機能を提供します。(JavaScriptモデルがほとんどの機能のベースとなるC#タイプを提供するだけです。)避けられないMVCと変わらない複雑なケースでは、JavaScriptとコンパイルされていないマークアップを記述するだけです。(MVCを除いて、コードも大きなjQueryの混乱になる可能性が高いため、そもそもDurandal / Knockoutを使用しています!)

特徴:

  • ASP.NET MVCと同様に、強く型付けされた流暢なラムダ式ヘルパーを使用して、ノックアウト構文を簡単に生成できます。
  • 構文生成のための豊富なインテリセンスとコンパイラのサポート
  • 流暢な構文により、カスタムヘルパーを作成したり、組み込みのものを拡張したりするのが簡単になります
  • ASP.NET MVCヘルパーに代わるOSS:コミュニティの全員が使用できるオプション機能を自由に追加してください
  • 現在/将来のすべてのアプリケーションタイプと変更について、数行のコードで.NETタイプとDataAnnotationsに基づく検証を簡単に提供します
  • クライアント側のJavaScriptオブジェクトファクトリ(C#タイプに基づく)。たとえば、リストに新しいアイテムを作成し、頭痛やサーバートラフィックをゼロにします。

FluentKnockoutHelpersを使用しない例

<div class="control-group">
    <label for="FirstName" class="control-label">
        First Name
    </label>
    <div class="controls">
        <input type="text" data-bind="value: person.FirstName" id="FirstName" />
    </div>
</div>
<div class="control-group">
    <label for="LastName" class="control-label">
        Last Name
    </label>
    <div class="controls">
        <input type="text" data-bind="value: person.LastName" id="LastName" />
    </div>
</div>
<h2>
    Hello,
    <!-- ko text: person.FirstName --><!-- /ko -->
    <!-- ko text: person.LastName --><!-- /ko -->
</h2>

FluentKnockoutHelpersに.NETタイプを提供すると、IntellisenseとRazor/CSHTMLのコンパイラを使用してこれをスタイリッシュに実行できます。

@{
  var person = this.KnockoutHelperForType<Person>("person", true);
}

<div class="control-group">
    @person.LabelFor(x => x.FirstName).Class("control-label")
    <div class="controls">
        @person.BoundTextBoxFor(x => x.FirstName)
    </div>
</div>
<div class="control-group">
    @person.LabelFor(x => x.LastName).Class("control-label")
    <div class="controls">
        @person.BoundTextBoxFor(x => x.LastName)
    </div>
</div>
<h2>
    Hello,
    @person.BoundTextFor(x => x.FirstName)
    @person.BoundTextFor(x => x.LastName)
</h2>

重要なDurandal.jsアプリケーションでのFluentKnockoutHelperの機能の完全な概要については、ソースまたはライブデモをご覧ください。

ミニファイ(など)に関するEvan Larsenの優れた点にすばやく対処するには:FluentKnockoutHelpersは実行時にロジックを実行せず、マークアップを生成するだけなので、人気のあるRazorEngineプロジェクトを使用して本番ビルド用の静的HTMLファイルを生成するのは非常に簡単です。 Razorを実行し、C#からHTMLを生成します。これは、Durandalの必要な本番ビルドステップの直前に実行できます(これにより、縮小などが可能になります)

于 2013-05-17T05:48:15.510 に答える
0

SPAは、MVCでレンダリングされたページの範囲内で動作します。

<div id="applicationHost">
    @Html.Partial("_splash")
</div>
  • MVCページは、メニュー、サイドバーなどを提供できます。クライアントSPAで提供されるPub / Subモデルにフックすることで、Durandalイベントを聞くことは確かに可能です。

  • MVCコントローラーを利用して、さまざまなマスターページ、バンドルをさまざまなSPAに配信します。各CSHTMLページは、異なるmain.js(main-viewport、main-uipanel.jsなど)ファイルを呼び出すことができます。

必要に応じて、2つのテクノロジーを組み合わせる方法はたくさんあります。

于 2013-04-06T05:29:05.797 に答える