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ドキュメントとソースコードは、公式の英語ドキュメントを直接見ればいいのではないかと聞かれるかもしれませんが、なぜこれらの文章を書くのでしょうか.
理由は次のとおりです.
このシリーズの文章は、20%の時間をかけて80%のものを学び、残りの20%は公式文書を見に行きます.
前に「Macの下でASP.NET Coreアプリケーションを実行する方法」を紹介しましたが、主にMacの下でASPを実行する方法について説明しました.NET Coreが走り始め、この記事ではController、View、Modelなどを追加する方法をさらに分析します.
Model-View-Controller(MVC)アーキテクチャモデルは、1つのアプリケーションをModel、View、Controllerの3つのブロックに分けます.
User
Modelはデータベースからユーザデータを取得し、それをViewに渡して表示または直接更新し、更新されたデータをデータベースに書き込む.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/Home
はHomeController
クラスにマッピングされる.URL segmentの2番目の部分はクラス内のActionメソッドを決定します.したがって、http://localhost:5000/Home/Index
はHomeController
クラスの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";
ViewDataDictionary
のTitle
属性を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
メソッドは、name
、id
パラメータを受け入れ、その後、ブラウザに直接値を出力する.文字列の代わりにコントローラでビューテンプレートを使用します.ビューテンプレートは動的応答を生成します.これは、コントローラが適切なデータをビューに渡すことで応答を生成する必要があることを意味します.コントローラは、ビューテンプレートに必要な動的データ(パラメータ)を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