0

WebPages(Razor)を使い始めたばかりで、壁の裏にあるいくつかの基本的な概念を理解しました。まず最初に、私が構築する各サイトについて、常に持っているものをリストします。

  • もちろんフレンドリーなURL(Webページは私のためにそれをします)
  • 翻訳されたURL(WebPagesはパラメーターをサポートしているため、管理が簡単です)
  • 複数のテンプレートのサポート(Webページはデフォルトではサポートされていません。ここでいくつかのロジックが必要です)
  • 重複を避けるために関数ごとに分離されたコード(WebPagesは壁の後ろでそれをサポートしています)

したがって、上記のリストについて考えると、古き良きMVCパターンが登場します。ASP.NETには、必要なすべての機能を提供するMVC(3)フレームワークがすでにあります。私はそれをよく知っています。この質問では、WebPagesテクノロジが大規模なMVC(のような)Webプロジェクトを開発するための完璧なプラットフォームでもあるかどうかを理解しようとしています。

私はWebページのページ読み込み動作/チェーンをテストし、実際に読み込まれたページと1つ以上のネストされたレイアウトによって構築されたチェーンを理解しました。すべてのレイアウトページには、ローダー(親)ページへのポインターがあります。

この時点で、いくつかの基本的な概念をクリアする必要があります。Webページは物理ファイルとフォルダー(パス)によってURLを解決するため、次のようなパスを使用して翻訳されたフォルダーとファイルを作成できるため、間接的にサポートされている翻訳済みURL:..../ en / account / registerハンガリー語など、別のパスを作成できますパス:... / hu / szemelyes/regisztracio。

両方の.cshtmlファイルにレジスタロジックを書き込むのはそれほど洗練されていないため、必要なのはコードを分離することだけです。WebPagesは@helpersと@functionsをサポートしているため、「Account.cshtml」を簡単に作成し、必要なすべての関数を作成できます。それは私の質問に対する公式の答えです。

.cshtml(ヘルパー)ファイルに@functionを書き込んだ場合、壁の後ろで何が起こりますか?WebPageHelperを継承する新しいクラスを作成します。同じ機能を提供する独自のクラスを作成できるので、これはあまりエレガントな方法ではないと思います。

さらに調査したところ、すべてのページ(およびレイアウトページ)はデフォルトでWebPageクラスを継承していることがわかりました。@inheritsディレクティブを使用すると、デフォルトの継承と、WebPageから派生した独自のクラスを作成するための完璧な方法をオーバーライドでき、すべての.cshtmlファイルでそのページから直接継承できます。

この時点で、@関数を使用するよりもエレガントな方法でコードを分離できます(私は思います:)。テキストの翻訳はどうですか?リソースファイルを使用する一般的な方法だと思いますが、WebPagesでは、テキスト値をプレーンな.cshtmlファイルに保存することを考えています。あなたはそれについてどう思いますか?

最後に私のregister.cshtml:

@inherits Account.Register
@{
     Title = "Please Register"
}

..そして私のregisztracio.cshtml:

@inherits Account.Register
@{
    Title = "Kérem regisztráljon"
}

My Account.RegisterクラスにはStringプロパティTitleがあります:

public class Register : WebPage
{
    public String Title { get; set; }
    ...
}

私が言わなければならないもう一つのことがあります。私のregister.cshtml(およびregisztracio.cshtml)にはhtmlマークアップが含まれていません。デフォルトのレイアウトファイル(_Master.cshtml)があり、「View」ディレクトリの下にページごとに別のレイアウトファイル(_Register.cshtml)があります。私のコードは、ロードされた「コントローラー」クラスの名前で正しいページレイアウトファイルを自動的にロードします。そのため、Registerクラスは「_Register.cshtml」レイアウトファイルを自動的にロードします。また、すべてのページレイアウトファイルは、メインレイアウトである_Master.cshtml(または訪問者がモバイルデバイスを使用している場合は_Mobile.cshtml)を自動的にロードします。

したがって、これはWebPagesテクノロジ用に実装されたMVCパターンであり、WebPagesの自動URL解決などの強力な機能を維持していると思います。

どう思いますか?

つまり、Webページに関する私の基本的な概念です。

4

1 に答える 1

0

I'm sure as you get more exposure to the framework you'll incorporate other practices. As to the language translation, you can use culture settings, together with resource files. You could set the current culture settings via global.asax, based on a query param.

Example of initializing the culture settings:

CultureInfo ci = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(ci.Name);

Then your solution would seamlessly make use of resource strings instead of literal strings, making your code cleaner and strongly typed. In your case it would also avoid having two separate registration views.

@inherits Account.Register
@{
    Title = StringsResource.RegisterTitle
}

Depending on the culture setting, the Title variable would hold either the "Please Register" text or the "Kérem regisztráljon".

Good luck!

于 2012-05-22T17:46:13.067 に答える