我在我的项目中使用带有EF的存储库模式的MVC-Viewmodel。
我有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; }
}
我使用Repository进行CRUD操作,使用viewmodel来处理UI中的数据。
现在我必须在我的控制器中对HTTPPOST Action Create进行编码,以便将问题数据插入到我的数据库中,并且需要使用CoreValue ID和SubjectType ID标记问题。所以我想开始编写HTTPOST操作Create,我想知道是否有人可以帮我解决这个问题。
提前致谢!
最诚挚的问候!
答案 0 :(得分:1)
我将如何处理它:
在ViewModel中,替换:
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代表我的数据库):
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
};
}