1

学校のコース データを保存するためのアプリケーションを作成しています。関連する 2 つのモデルを .Net MVC の 1 つのビューに保存する必要がありますが、これをどのようにまとめればよいかわかりません。

サブジェクトとクラスの 2 つのモデルがあり、1 つのサブジェクトが複数のクラスを持つことができます。私の見解では、ユーザーが新しい科目の詳細を入力できるようにし、1 回のフォーム送信でその科目にクラスを割り当てることもできるようにしたいと考えています。

例:
科目名
科目主任教師名

(1 つの教科に多くのクラスがある場合、以下のフィールドは再帰的になる場合があります)
クラス名
クラスの開始時間
クラスの先生の名前

ユーザーが来て、科目名と科目主任教師の名前を入力し、続いて新しいクラス名、開始時刻、クラスの教師名を入力します。これが完了すると、フォームが送信され、科目名と科目を保存する必要があります。教師の名前を科目モデルに、クラス名、クラスの開始時刻、およびクラスの教師の名前をクラスに導きます。

  1. 2 つのモデルの 1 つのビューでフォーム フィールドを作成するにはどうすればよいですか?
  2. 送信されたデータを取得して、2 つの別々のモデルに保存するにはどうすればよいですか?

誰かがこれを手伝ってくれて、今迷っているので素晴らしいサンプルコードを提供してくれたら!

4

2 に答える 2

3

これはまさにviewModelの目的です。UI で新しいクラスを作成し、ビューでアクセスする必要があるプロパティを指定します。

public class SubjectClassViewModel()
{
  public string SubjectName {get; set;}
  public string LeadTeacherName {get; set;}
  public string ClassName {get; set;}
  public DateTime StartTime{get; set;}
  public string TeacherName{get; set;}
}

次に、このビューモデルにビューを強く入力しますコントローラーで、ビューモデルを収集し、データを適切なテーブルに保存します

[HttpPost]
public ActionResult Details (SubjectClassViewModel viewModel)
{
  //can't really give details here without knowing what pattern you're using for data access
  //but basically you want to
  //save viewModel.SubjectName and viewModel.LeadTeacherName to the Subject table
  //save viewModel.ClassName, etc to the Class table
}
于 2012-08-17T17:59:37.053 に答える
1

ラッパーを使用することをお勧めします。はい、使用しているビューまたはフォームを表す主要なクラスであり、それをビュー モデル タイプとして設定します。次のようなものを試してください。

モデル:

public class person
    public property id as integer
    public property name as string
    public property status as integer
end class

public class marriage
    public property husband as person
    public property wife as person
end class

次にビューで:

@Modeltype marriage

<span>Wife Name:</span></br>
@Model.wife.Name

</br>

<span>Husband Name:</span></br>
@Model.husband.Name

アクションでは、クラスの結婚を取り、分離によって各人を取得します

dim t_wife as person = marriage.wife
dim t_husband as person = marriage.husband

'Put save wife code here ---

'Put save husband code here ---
于 2012-08-17T14:23:38.370 に答える