5

これが基本的な質問である場合は申し訳ありません - ページ フレームワークから ASP.NET MVC への精神的な移行に問題があります。

ページ フレームワークでは、ASCX ファイルをよく使用して、サイト全体のさまざまな場所に含まれる小さなカプセル化された機能のチャンクを作成します。ページを作成していて、これらのコントロールのいずれかが必要な場合は、参照を追加するだけですべてが機能します。

私の知る限り、MVC では、ASCX ファイルは単なる部分的なビューです。これは、これらの機能ユニットのいずれかを追加したい場合は、コントローラーのアクション メソッドにコードを追加して、関連する ViewData が ASCX で利用できるようにする必要があるということですか?

もしそうなら、私には少し後退しているように思えます。たとえば、ビューがそのマスター ページを使用するすべてのコントローラーにコードを追加することなく、コントロールをマスター ページに「ドロップ」することはできませんでした。

私は何かが足りないのではないかと思います - どんな助けもいただければ幸いです。

ありがとう - クリス

4

3 に答える 3

3

あなたの質問はすでに回答されていますが、完全を期すために、時々魅力的な別のオプションがあります。

ASP.NET MVCで「コントロール」がどのようにマスクされるかを見たことがありますか?これらは「HtmlHelper」のメソッドです。たとえば、「FirstName」にバインドされたテキストボックスが必要な場合は、次のように実行できます。

<%= Html.Textbox("FirstName") %>

そして、あなたは多くの標準的なコントロールのためにそのようなものを持っています。

あなたができることは、そのような独自のメソッドを作成することです。独自のメソッドを作成するには、次のようにHtmlHelperクラスに拡張メソッドを作成する必要があります。

public static class HtmlHelperExtensions
{
    public static string Bold(this HtmlHelper html, string text)
    {
        return "<b>" + text + "</b>\n";
    }
}

次に、ビューで、このクラス定義を含む名前空間を開いた後、次のように使用できます。

<%= Html.Bold("This text will be in bold-face!") %>

まあ、これは特に便利ではありません。しかし、あなたは非常に興味深いことをすることができます。私がよく使用するのは、列挙型を取得し、この列挙型の値を使用してドロップダウンリストを作成するメソッドです(例:enum Gender { Male, Female }、およびビューではのようなものGender: <%= Html.EnumDropDown(Model.Gender) %>)。

幸運を!

于 2009-11-07T00:55:56.627 に答える
3

私の知る限り、MVC では、ASCX ファイルは単なる部分的なビューです。これは、これらの機能ユニットのいずれかを追加したい場合は、コントローラーのアクション メソッドにコードを追加して、関連する ViewData が ASCX で利用できるようにする必要があるということですか?

はい。

RenderActionただし、の代わりにビューでメソッドを使用できRenderPartial、すべての機能 (サブビューに渡されるデータを含む) がカプセル化されます。

つまり、これにより、コントローラー メソッド、ビュー データ、およびメイン ビュー内から 1 行のコードで呼び出すことができる部分ビューを組み込んだ小さなパッケージが作成されます。

于 2009-11-07T00:43:12.050 に答える
1

部分ビューをレンダリングして、モデル オブジェクトを渡すことができます。

<% Html.RenderPartial("MyPartial", ViewData["SomeObject"]);

部分ビュー (.ascx) ファイルでは、"Model" オブジェクトを使用して (@ Control 減速で適切なオブジェクトを継承していると仮定します)、そのオブジェクトに対して必要なことを行うことができます。

もちろん、モデルを渡さずに、部分ビューのテキストを取得して、必要な場所に配置することもできます。

メイン ビュー (.aspx ファイル) では、部分ビューに渡す ViewData に適切なオブジェクトを定義する必要があります。

あなたができる別の方法は、使用することです:

<% Html.RenderAction("MyAction", "MyController", new { Parameter1="Value1"}) %>

前のメソッドが行うことは、コントローラ アクションを呼び出し、その応答を受け取り、「RenderAction()」メソッドを呼び出した場所に配置することです。コントローラ アクションに対してリクエストを実行し、レスポンスを読み取るのと同じですが、レスポンスを別のファイルに配置する必要があります。

詳細については、Google の「renderaction と renderpartial」を参照してください。

于 2009-11-07T00:44:37.093 に答える