2014-09-10 2 views
1

я хочу передать две модели одной из точек зрения используя ViewModelПроблемы с передачей двух моделей на одной точке зрения

Мои модели:

 public class Candidat 
    { 
    public int Id { set; get; } 
    public string num_cin { set; get; } 
    public ICollection<Poste> postes { get; set; } 
    } 

    public class Poste 
    { 
    public int Id { set; get; } 
    public string poste_name {set;get} 
    public List<Candidat> candidats {set;get;} 
     } 

    public class PosteCandidatViewModel 
     { 

    public Candidat candidat { get; set; } 
    public Poste poste { get; set; } 
     } 

действие контроллера:

[HttpPost] 
    public ActionResult Index(Poste poste,string num_cin) 
    { 
     if (ModelState.IsValid) 
     { 
      var v = (from c in _db.Candidats 
        where c.num_cin == num_cin 
        && c.postes.Any(p => p.Id == poste.Id) 
        select c) 
        .SingleOrDefault(); 

      if (v != null) 
      { 
       return RedirectToAction("Inscription", "Candidat"); 
      } 

      else 
      { 
       return RedirectToAction("index", "BureauOrdre"); 
      } 

      } 
     return View(); 

мнение, :

 @model ProcRec.Models.PosteCandidatViewModel 

     <td>@Html.TextBoxFor(model => model.candidat.num_cin)</td> 

     <td><p>@Html.DropDownListFor(model => model.poste.Id,new 
      SelectList(ViewBag.Postes, "Id", "intitule_poste"),"choisir le poste") 
      </p></td> 

m y проблема в том, что запрос linq не дает результат, я хочу (но если я дал num_cin poste.id некоторые значения, это работает)

поэтому проблема в том, что num_cin не имеет значения из раскрывающегося списка ... это похоже на пустое значение !!!!!!!!!

ответ

0

Изменить метод POST подписи, чтобы принять модель, а доступ свойства модели

[HttpPost] 
public ActionResult Index(PosteCandidatViewModel model) 
{ 
    Poste poste = model.Poste; 
    string num_cin = model.Candidat.num_cin; 

Причина, по которой параметр string num_cin равно нулю, потому что @TextBoxFor(model => model.candidat.num_cin) генерирует <input type="text" name="candidat.num_cin" ... />, который пытается сопоставить свойству candidat, который содержит свойство num_cin. В качестве альтернативы можно использовать UPI

[HttpPost] 
public ActionResult Index(Poste poste, [Bind(Prefix="candidat")]string num_cin) 
{ 

Примечание, если ModelState является недействительным, необходимо переназначить значение ViewBag.Postes, что вы используете в DropDownListFor()

if (ModelState.IsValid) 
{ 
    .... 
} 
ViewBag.Postes = // set the value here before returning the view 
return View(model); 
+0

я попробовал, что это дает мне исключение .... ............. Значение не может быть нулевым. Имя параметра: items (DrodownList) – saidmohamed11

+0

Где происходит исключение? –

+0

Я исправил исключение из-за проверки, которую у меня есть в моих моделях ....... Я не хочу передавать PosteCandidatViewModel в качестве параметра моего действия Post ... потому что, если бы я сделал это, он дал мне некоторую проверку ошибки (потому что мои модели содержат много обязательных атрибутов) – saidmohamed11

Смежные вопросы