MVC-Viewmodel и LINQ. Вставьте значение в таблицу, и это значение будет помечено двумя другими значениями в двух других таблицах. - PullRequest
2 голосов
/ 20 февраля 2012

Я использую MVC-Viewmodel с шаблоном репозитория с EF в моем проекте.

У меня есть 3 таблицы, Вопрос, CoreValue, SubjectType. SubjectType и CoreValue во многом связаны с Вопросом, и эти две таблицы не предполагают получения каких-либо новых значений, но пользователи могут создавать вопросы, поэтому таблица Вопросов получит новые данные, когда пользователь их создаст. Я использую два раскрывающихся списка для 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 и SubjectType. Поэтому я подумывал начать кодировать действие HTTPOST Create, и мне было интересно, может ли кто-нибудь помочь мне с этим.

Заранее спасибо!

С наилучшими пожеланиями!

1 Ответ

1 голос
/ 20 февраля 2012

Вот как я бы с этим справился:

В вашей 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 представляет мою таблицу, репозиторий - мой проект, где у меня есть .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
        };
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...