2012-02-20 14 views
2

我在項目中使用帶EF模式的MVC-Viewmodel。MVC-Viewmodel和LINQ,將值插入到一個表中,並通過兩個其他表中的其他兩個值標記該值

我有3個表格,Question,CoreValue,SubjectType。 SubjectType和CoreValue與Question有很多很多關聯,這兩個表並不假設有任何新值,但用戶可以創建問題,這樣Question表就會在用戶創建新數據時獲取新數據。我使用CoreValue和SubjectType的兩個下拉列表,以便用戶在創建問題時可以選擇CoreValue和SubjectType。

這裏是我的HTTPGET控制器操作:

// GET: /Admin/Create 

    public ActionResult Create() 
    { 

    CoreValueRepository Crep = new CoreValueRepository(); 
    SubjectTypeRepository Srep = new SubjectTypeRepository(); 

     CreateViewModel model = new CreateViewModel(); 
     List<SubjectType> subjectypes = Srep.getall(); 
     List<CoreValue> corevalues = Crep.getall(); 
     model.SubjectTypes = new SelectList(subjectypes, "SID", "Sname"); 
     model.CoreValues = new SelectList(corevalues, "CID", "Cname"); 

     return View(model); 

    } 

這裏是我的ViewModel:

公共類CreateViewModel {

public string QuestionText { get; set; } 
public string Sname { get; set; } 
public string Cname { get; set; } 

public SelectList SubjectTypes { get; set; } 
public SelectList CoreValues { get; set; } 

}

我使用存儲庫CRUD操作和視圖模型來處理用戶界面中的數據。

現在我必須在我的控制器中編寫HTTPPOST操作Create,將問題數據插入到我的數據庫中,並且需要使用CoreValue ID和SubjectType ID標記問題。所以我想着開始編寫HTTPOST動作Create,而且我想知道是否有人可以幫我解決這個問題。

在此先感謝!

最好的問候!

回答

1

這是我將如何處理它:

在您的視圖模型,代替:

public class CreateViewModel { 

public string QuestionText { get; set; } 
public string Sname { get; set; } 
public string Cname { get; set; } 

public int SubjectTypesID { get; set; } 
public int CoreValuesID { get; set; } 
} 

在你HTTPGET把你的列表中Viewbags:

public ActionResult Create() 
{ 

    CoreValueRepository Crep = new CoreValueRepository(); 
    SubjectTypeRepository Srep = new SubjectTypeRepository(); 

    CreateViewModel model = new CreateViewModel(); 
    ViewBag.SubjectTypes = Srep.getall(); 
    ViewBag.CoreValues = Crep.getall(); 

    return View(model); 

} 

要使用viewbag在你的看法你可以用這個:

@Html.DropDownList("SubjectTypesID ", new SelectList(ViewBag.SubjectTypes as System.Collections.IEnumerable, "SID", "Sname", Model.SubjectTypesID)) 

@Html.DropDownList("CoreValuesID ", new SelectList(ViewBag.CoreValues as System.Collections.IEnumerable, "CID", "Cname", Model.CoreValuesID)) 

您HTTPOST:

[HTTPOST] 
public ActionResult Create(CreateViewModel model) 
{ 
    //Now with your model you have the Id of CoreValue and SubjectType 
    //You could do 
if (ModelState.IsValid) 
{ 
    QuestionRep.Add(model); 
    return RedirectToAction("Index"); 
} 


    return View(model); 
} 

希望這可以幫助你:)

編輯:

在我的倉庫

我做的:

public void Add(Model.Models.LabExam.Examen entity) 
    { 
     using (var context = new PDSIDataContext()) 
     { 
      var exam = BindModelExamenToRepExamen(entity); 
      context.Examen.InsertOnSubmit(exam); 
      context.SubmitChanges(); 
     } 
    } 

結合的方法(Repository.Examen代表我表,Repository是我的項目,我有一個.dbml來代表我的DB):

 private static Repository.Examen BindModelExamenToRepExamen(Model.Models.LabExam.Examen modelExamen) 
    { 
     return new Repository.Examen 
     { 
      ID_Examen = modelExamen.ID, 
      ID_Examen_Type = modelExamen.ID_Examen_Type, 
      Date_Prescription = modelExamen.Date_Prescription, 
      Realise_Le = modelExamen.Realise_Le, 
      Statut = modelExamen.Statut, 
      Fait = modelExamen.Fait, 
      ID_Examen_Sous_Type = modelExamen.ID_Examen_Sous_Type, 
      ID_Examen_Sous_Sous_Type = modelExamen.ID_Examen_Sous_Sous_Type, 
      ID_Patient = modelExamen.ID_Patient, 
      Commentaires = modelExamen.Commentaires 
     }; 
    } 
+0

謝謝你的回答!你有什麼想法我可以用我現在的代碼做我的HTTPPOST嗎? – Obsivus 2012-02-20 17:33:49

+0

好吧,如果你在你的viewmodel中保留了selectList,我不知道你是否有權訪問你在HTTPOST中的viewmodel中的seleclist的selectedValue。那就是爲什麼我給你另一種方式來做這件事。在httpost中,參數模型將包含用戶輸入的所有信息,因此您只需將此參數傳遞給您的存儲庫以進行保存即可。 – ThePaye 2012-02-20 18:03:24

+0

Okey我試着用viewbag var newQuestion = question(); newQuestion.SubjectTypeId = model.SubjectTypeID;不工作beacuse newQuestion是一個問題類,我只能選擇問題表的值,而不是subjectTypes ID。 :S – Obsivus 2012-02-20 19:14:48

相關問題