我々はAsp.Net MVC、Asp.Net MVCコアのモデル、ビュー、コントローラを学び、また、我々はAsp.Net MVCに精通しているとし、同様です。違いはAsp.NetコアMVCのを使用しているとき、我々はMVCを注入する必要があるということです。
注入法Asp.NetコアMVC MVC、2、1はAddMvcCore(ある)がありますが、それは単にあなたが完全なMVCを使用したい場合は、使用する必要がある、などするViewResult、するJsonResultを返すのが好き除く、コアなものMVCの一部を注入別の方法AddMvc注射は()AddMvc AddMvcCore中()の呼び出し()、注入されます。
ここでは、詳細なモデル、ビュー、コントローラに説明する必要があります。
私たちは、私たちはモデル、ビュー、コントローラの3つのフォルダを生成するのに役立つ新しいMVCプロジェクトテンプレートを作成した後、通常我々は、新しいモデルのモデルに置くが、実際のプロジェクトでは、我々は通常、新しいプロジェクトのモデルを置きます。
MVCモデルは、クラスのセットが含まれており、データの論理的なデータ管理を表します。モデルデータを通って、ビュー・コントローラの間で渡すことができます。私たちは、実現学生インターフェースストレージインターフェイスがあり、生徒のクラスを定義します。
/// <要約> /// 学生模型 /// </要約> パブリック クラスの学生 { 公共 のint Idを{ 取得します。セット; } パブリック 文字列名前{ 得ます。セット; } パブリック 文字列クラス名{ 得ます。セット; } パブリック 文字列メール{ 取得します。セット; } }
パブリック インターフェイスIStudentRepository { 学生GetStudent(あなたへ)。 }
パブリック クラスMockStudentRepository:IStudentRepository { プライベートリスト<学生> _studentList。 公共MockStudentRepository() { _studentList = 新しいリスト<学生> (); _studentList.AddRange(新しいリスト<学生> (){ 新学生(){ID = 1、NAME = " 张三"、クラス名= " 三年一班"、電子メール= " [email protected] " }、 新しい学生(){ID =2、NAME = " ジョン・ドウ"、クラス名= " 3クラス"、メールに= " [email protected] " }、 新しい新しい学生()= {ID 。3、NAME = " 王呉"、クラス名= " 3クラス" =メールに、" [email protected] " }、 新しい新しい学生()= {ID 。4、名前= " 趙6 "クラス名= " 3クラス"メールに= " [email protected] "}、 新しい学生(){ID = 5、NAME = " 钱七"、クラス名= " 三年一班"、電子メール= " [email protected] " } })。 } 公共学生GetStudent(int型のID) { 戻り _studentList.Whereを(S => s.Id == ID).FirstOrDefault(); } }
新しいにHomeControllerを作成し、コードを追加します。
プライベート 読み取り専用IStudentRepository _studentRepository。 // 构造函数注入 公衆にHomeController(IStudentRepository studentRepository) { _studentRepository = studentRepository。 } 公共 IActionResultインデックス(int型のID) { 戻りビュー(_studentRepository.GetStudent(ID))。 }
ビューIndex.cshtmlを追加
@model StudentManagement.Models.Student @ { ViewDataを[ " タイトル" ] = " インデックス" 。 } の<div> @ Model.Id @ Model.Name @ Model.ClassName @ Model.Email </ div>
私たちは、コントローラは、パラメータビューとして返さ学生データリポジトリに介して取得することを見たり、ビューインデックス@modelのStudentManagement.Models.Studentに、私たちはモデルを参照するために使用することができます。
もちろん、ビューにデータを渡すために他の方法がありますが、私たちはAsp.Net MVCであり、この時間は同じである、我々はまとめることができます。
1、ViewDataを:辞書オブジェクトの弱いタイプ、キーと値のペアの文字列型を使用して、実行時に動的解析、何のIntelliSenseが存在しない、コンパイラが型をチェックしません。
2、ViewBag:ViewDataをラッパーは、データを格納および照会するために、動的プロパティを表示するの弱いタイプを作成します。
3、強く型付けされたビュー:ビュー@modelディレクティブでは、コンパイル時の型チェックやIntelliSenseのを提供し、@Modelアクセスモデルオブジェクトのプロパティを使用して、モデルタイプを指定します。
どのように私たちにHomeControllerのコンストラクタで、入ってくるパラメータIIStudentRepositoryがある、ということに注意してください?私たちは、スタートアップフォルダの前で話すが、ConfigureServices方法は、サービスを注入するために使用されて知っているので、我々はIIStudentRepositoryに注入する必要があるときに、Asp.Netコアは、依存性注入コンテナが付属しています知っている、それ以外の場合は実行例外がスローされます。
services.AddTransient <IStudentRepository、MockStudentRepository>();
リターンビュー時には、上記の例では、我々は引数としてモデルを渡され、実際には、それはまた、ビュー名を渡すことができ、あなたは、ビュー名を渡すとき、あなたは比較的、ファイル拡張子.cshtml絶対パスを指定する必要があります絶対パスまたは相対パスを使用することができますパス拡張.cshtmlを取ることはありません。
私たちは、ビュー(「詳細」)を返す呼び出して、詳細ビューを定義します
パブリックたObjectResultの詳細() { 返す 新たObjectResult(_studentRepository.GetStudent(1 )); }
返すビュー(「詳細を」);
私たちは、相対パスを使用している、ネットコアは、ビューを見つけるために、次の手順を実行します
1は、「/ビュー/ホーム/」フォルダ内に、見つける、リターンを見つけ、見つけるために、ステップ2に続けるために見つけることができません。
2は、「/ビュー/共有/」フォルダ、リターンを見つけ、見つけるには、見つけるために、ステップ3に続けるために見つけることができません。
3、で「/ページ/共有/」フォルダ、ファイルが見つかった場合、その後、要求元のクライアントに返送されたHTMLを表示表示見つけます。あなたがファイルを表示できない場合は、エラーが表示されます。
The view 'Detail' was not found
最后,讲一下ViewModel模型视图的一个概念,很多时候我们的视图需要的数据往往比我们定义的Model能提供的数据要多,这时候就可以使用ViewModel了,在实际项目开发中,ViewModel也等于DTO(数据传输对象)。至于ViewModel的使用和Model一样,传递到View中进行显示。