ASPを作成する.NET Core MVCアプリケーション(1)-ControllerとViewの追加

8880 ワード

ASPを作成する.NET Core MVCアプリケーション(1)-ControllerとViewの追加


参考文献:Getting started with ASP.NET Core MVC and Visual Studio
このシリーズの文章は参考になった.NET Coreドキュメントとソースコードは、公式の英語ドキュメントを直接見ればいいのではないかと聞かれるかもしれませんが、なぜこれらの文章を書くのでしょうか.
理由は次のとおりです.
  • 公式ドキュメントの内容はかなり全面的で、大きな知識倉庫に属しており、初心者には向いておらず、重要性を失いやすく、具体的な細部に落ちてしまいます.
  • 多くの人にとって言語を開発するのはツールにすぎません.プログラマーには共通の病気があります.ツールをぶつけて、ツールを深く勉強します.ツールにあまり時間をかける必要はなく、日常の作業項目を効率的に完成できるようにすればいいと思います.学習を駆動するには、何を学ぶ必要がありますか.もしあなたが学んだ新しい技術の新しい特性が屠龍の技にすぎないか、あるいは使う必要があるときに調べればいいなら、このような死打は何の役にも立たない.120%の時間をかけて100%の知識を学ぶ必要はありません.あなたは20%の時間をかけて80%の知識を学ぶだけでいいです.残りは実際のプロジェクトで使うときに調べればいいです.ツールはツールだけで、仕事そのものではありません.
  • 現在のほとんどの記事は、WindowsプラットフォームのVisual Studio IDEに基づいて紹介されています.私はMacを使っているので、MacプラットフォームのVisual Studioコードに基づいて、実際のプロジェクトで出会った知識を説明します.
  • もう一つ、これは私の個人的な学習の総括です.

  • このシリーズの文章は、20%の時間をかけて80%のものを学び、残りの20%は公式文書を見に行きます.
    前に「Macの下でASP.NET Coreアプリケーションを実行する方法」を紹介しましたが、主にMacの下でASPを実行する方法について説明しました.NET Coreが走り始め、この記事ではController、View、Modelなどを追加する方法をさらに分析します.
    Model-View-Controller(MVC)アーキテクチャモデルは、1つのアプリケーションをModel、View、Controllerの3つのブロックに分けます.
  • Models:アプリケーション・データのクラスを表し、検証ロジックを使用してデータを制約するビジネス・ルール.通常、モデル・オブジェクトは、データベースからエンティティ・モデル・データを取得および格納するために使用されます.例えばUser Modelはデータベースからユーザデータを取得し、それをViewに渡して表示または直接更新し、更新されたデータをデータベースに書き込む.
  • Views:Modelデータを表示するアプリケーションUIを表示するコンポーネント.
  • Controllers:ModelsとViewsの橋です.ブラウザ要求を処理し、Modelデータを取得し、指定したビューテンプレートを応答としてブラウザに返します.ビュー(View)は情報を表示するためにのみ使用され、コントローラ(Controller)はユーザーの入力とインタラクションを処理して応答するために使用されます.たとえば、Controllerはルーティングデータのクエリー文字列値を処理し、これらの値をModelに渡し、Modelはこれらの値を使用してデータベースをクエリーします.

  • MVCモードは、モジュール間が緩やかに結合されている間に、分離に注目するアプリケーション(入力ロジック、ビジネスロジック、UIロジック)を作成するのに役立ちます.UIロジックはViewに属し、入力ロジックはControllerに属し、ビジネスロジックはModelに属する.

    Controllerの追加

    namespace MyFirstApp.Controllers
    {
        public class HomeController : Controller
        {
            // GET: //
            public IActionResult Index()
            {
                return View();
            }
    
            // GET: //About
            public IActionResult About()
            {
                ViewData["Message"] = "Your application description page.";
    
                return View();
            }
    
            public IActionResult Contact()
            {
                ViewData["Message"] = "Your contact page.";
    
                return View();
            }
    
            public IActionResult Error()
            {
                return View();
            }
    
            public IActionResult Welcome(string name, int id = 1)
            {
                ViewData["Message"] = "Hello " + name;
                ViewData["id"] = id;
    
                return View();
            }
        }
    }

    コントローラ内の各publicメソッドは、HTTPターミナルとして呼び出されることができる.
    最初のコメントは、ルートURLに「/Home/」を追加して呼び出すHTTP GETメソッドであることを示しています.2番目のコメントは、ルートURLに「/Home/About/」を追加して呼び出すHTTP GETメソッドであることを示している.
    MVCは、入力された要求URLに基づいて、対応するコントローラクラスおよびその中のアクションメソッドを呼び出し、MVCがデフォルトで使用するURLルーティングロジックは、このようなフォーマットと同様に、特定のコード呼び出しを決定する./[Controller]/[ActionName]/[Parameters] Startup.csを開くと、プロジェクトのルーティングルールが表示されます.
    URLセグメントを持たずにプログラムを直接実行すると、ホームコントローラのIndexメソッドにデフォルトでアクセスします.
    最初のURL segmentは、どのコントローラを実行するかを決定するので、http://localhost:5000/HomeHomeControllerクラスにマッピングされる.URL segmentの2番目の部分はクラス内のActionメソッドを決定します.したがって、http://localhost:5000/Home/IndexHomeControllerクラスのIndexメソッドを実行します.URL segmentの第3の部分(id)は、ルーティングデータである.
    ここでは、URLを介していくつかのパラメータ情報をControllerに渡す方法を追加して表示する.
    public string Welcome(string name, int id = 1)
    {
        return HtmlEncoder.Default.Encode($"Hello {name}, id: {id}");
    }

    上記のコードは、HtmlEncoder.Default.Encodeを使用してJSの悪意ある入力からアプリケーションを保護し、C#の新しい特性Interpolated Stringsを使用します.http://localhost:5000/Home/Welcome?name=Charlire&id=1
    MVCのモデルバインドシステムは、クエリー文字列の命名パラメータを特定のメソッドのパラメータに自動的にマッピングし、名前が一致しなければならないことに注意する.
    上記コードではURL segment(Parameters)は使用されず、パラメータnameおよびidはいずれもクエリ文字列として渡される.?は区切り記号で、後続はクエリー文字列であり、&はクエリー文字列を分割するために使用されます.
    次のURL:http://localhost:5000/Home/Welcome/1?name=Charlireを入力します.3番目のURL segmentは、ルーティングパラメータidに一致する.Welcomeメソッドは、MapRouteメソッドのURLテンプレートに一致するidパラメータを含む.続く?(id?)は、idパラメータがオプションであることを示す.

    Viewの追加


    Razorビューエンジンによりビューテンプレートファイルを作成する、Razorのビューテンプレートに基づいて使用する.cshtmlはファイル拡張子として、C#を使用して優雅な方法でHTMLを作成します.
    public IActionResult Index()
    {
        return View();
    }

    上記のIndexメソッドは、ビューテンプレートを使用して、ブラウザにHTML応答を生成する.Controllerのアクション方法は、通常、Stringのようなベースタイプではなく、IActionResult(またはActionResultクラスに割り当てられた)を返す.
    Viewsフォルダをクリックし、そのフォルダの下にController名に対応するフォルダを新規作成します.
    次に、Views->Userフォルダに移動する、コマンドyo aspnet:mvcview Indexを実行してそのフォルダの下にIndexを生成する.cshtml. Indexメソッドは、単純にreturn View()を実行して、ブラウザに最新の応答をレンダリングするためにビューテンプレートファイルを使用する方法を指定するだけです.使用するビューテンプレートファイルが明示的に指定されていないため、MVCは/Views/UserフォルダのIndexをデフォルトで使用する.cshtml.

    ビューとレイアウトページの変更


    一般的にメニューリンクをクリックすると、各ページに同じメニューレイアウトが表示されます.このメニューレイアウトは*Views/Shared/_にあります.Layout.cshtml*ファイル.
    Layoutテンプレートでは、WebサイトのHTMLコンテナレイアウトを1つの場所で指定し、Webサイトの複数のページに適用できます.@RenderBody()は、指定したビューの場所、「ラップ先」レイアウトページを表示するプレースホルダです.例えばAboutリンクをクリックするとcshtmlビューはRenderBodyメソッドでレンダリングされます.

    Layoutファイルのタイトルとメニューリンクの変更


    注意各ページに新しい変更のリンクが表示され、Layoutテンプレートで変更すると、Webサイトのすべてのページがすぐに新しい変更の情報として表示されます.
    *View/_を表示ViewStart.cshtml*ファイル:
    @{
        Layout = "_Layout";
    }

    *Views/_ViewStart.cshtml*ファイルは*Views/Shared/Layout.cshtml*ファイルは各ビューに導入されます.Layoutのプロパティを使用して、異なるレイアウトビューを設定するか、nullに設定すると、レイアウトファイルは使用されません.
    Views/User/Indexを変更します.cshtmlファイルは次のとおりです.
    @{
        ViewData["Title"] = "User List";
    }
    
    

    User List

    Hello from View Template!

    ViewData["Title"] = "User List"; ViewDataDictionaryTitle属性をUser Listに設定します.このTitleプロパティは*Views/Shared/_で使用されます.Layout.cshtml*Layoutページの</code>HTML 。</p> <pre><code><code><title>@ViewData["Title"] - User MVC Application注意cshtmlビューテンプレートの内容と*Views/Shared/Layout.cshtml*ビューテンプレートをマージし、レイアウトテンプレートを使用すると、アプリケーション内のすべてのページを変更しやすくなります.

    ControllerからViewへのデータ転送


    データベースとモデル(Models)について話す前に、コントローラからビューへの情報伝達について議論しましょう.コントローラメソッドは、入力されたURLリクエスト応答時に呼び出されます.コントローラクラスは、受信したブラウザ要求を処理し、データベースからデータを取得し、最終的にどのタイプの応答がブラウザに返信されるかを決定するために使用されます.
    コントローラは、主にビューテンプレートを提供して、ブラウザに応答するために必要なデータまたはオブジェクトを表示します.
    ベストプラクティス:ビューテンプレートは、ビジネスロジックを実行したり、データベースと直接対話したりするのではなく、コントローラを使用してデータを提供する必要があります.このような「関心の分離」を維持することで、コードを清潔に保ち、テスト性とメンテナンスが容易になります.
    現在、HomeControllerコントローラのWelcomeメソッドは、nameidパラメータを受け入れ、その後、ブラウザに直接値を出力する.文字列の代わりにコントローラでビューテンプレートを使用します.ビューテンプレートは動的応答を生成します.これは、コントローラが適切なデータをビューに渡すことで応答を生成する必要があることを意味します.コントローラは、ビューテンプレートに必要な動的データ(パラメータ)をViewData辞書に入れ、ビューテンプレートは辞書にアクセスしてこれらのデータを取得できます.ViewData辞書は動的オブジェクトであり、任意のデータを追加することができます.データを追加する前に、ViewDataオブジェクトには定義された属性はありません.MVCのモデルバインドシステムはアドレスバーのクエリ文字列の命名パラメータをあなたの方法のパラメータに自動的にマッピングします.
    public IActionResult Welcome(string name, int id = 1)
    {
        ViewData["Message"] = "Hello " + name;
        ViewData["id"] = id;
    
        return View();
    }
    ViewDataディクショナリオブジェクトには、ビューに渡すデータが含まれます.では、Welcomeビューテンプレートを作成します.
    ここはWelcomeです.cshtmlビューテンプレートにループを作成します.
    @*
        For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
    *@
    @{
        ViewData["Title"]= "Welcome Page";
    }
    

    Welcome

      @for(int i=0; i@ViewData["Message"] }

    データはURLから取得され、MVCモデルバインディングによってコントローラに渡され、コントローラはデータをViewData辞書にパッケージ化し、オブジェクトをビューに渡す.次に、ビューはデータをHTML形式でブラウザにレンダリングします.
    コントローラからビューにデータを渡すためにViewData辞書を使用し、ViewData辞書はダイナミックオブジェクトであり、ビューに情報を渡すための便利な後期バインド方式を提供します.次に、ビューモデル(View Model)を使用して、同じ目的を達成します.ViewDataよりも、View Modelによるデータの転送が人気です.

    個人ブログ


    私のブログ
    転載先:https://www.cnblogs.com/charliechu/p/6064964.html