MVC-Viewmodel和LINQ,将值插入表中,该值由另外两个表中的另外两个值标记

时间:2012-02-20 16:35:27

标签: asp.net-mvc asp.net-mvc-3 linq entity-framework mvvm

我在我的项目中使用带有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,我想知道是否有人可以帮我解决这个问题。

提前致谢!

最诚挚的问候!

1 个答案:

答案 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
        };
    }