2013-11-08 4 views
3

Я хочу передать модель в метод Post для контроллера. Когда метод вызывается, он показывает нулевое значение для содержимого и 0 для Id. В идеале он должен содержать значения модели, которые она отображала.Pass Model от View до Controller

enter image description here

Вид:

@model MvcApplication4.Models.WorldModel 
@{ 
    ViewBag.Title = "Information"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

@using (Html.BeginForm("Information", "World", FormMethod.Post)) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 
    <br /> 
    @Html.DisplayFor(model => model.Id) 
    <br /> 
    @Html.DisplayFor(model => model.Content) 
    <br /> 
    <input type="submit" value="Next" /> 
} 

Контроллер: Метод вызывается, когда нажмите на кнопку отправки.

 [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Information(WorldModel worldModel) 
     { 
      CandidateSession cs = (CandidateSession)Session["Can"]; 
      var can = cs.Candidates.Where(x => x.IsNameDispalyed == false); 
      if (can.Count() > 0) 
      { 
       var can1 = can.First(); 
       can1.IsNameDispalyed = true; 
       Session["Can"] = cs; 
       return View(new WorldModel() { Id = can1.Id, Content = can1.Name }); 
      } 
      return View(new WorldModel()); 
     } 

Модель:

public class WorldModel 
    { 
     public int Id { get; set; } 

     public string Content { get; set; } 
    } 

ответ

4

Вы должны добавить скрытые входы, содержащие ваши значения:

@Html.HiddenFor(model => model.Id) 
@Html.HiddenFor(model => model.Content) 

Это происходит потому, что модель связующий будет искать входы (например, текстовые поля, или скрытых полей) получать значения и связывать их с вашими свойствами модели (на основе входных имен). Нет ввода с DisplayFor, поэтому связующее устройство не может найти ваши значения при отправке формы.

+0

Спасибо за помощь. Я включил скрытое поле для идентификатора и контента в поле отображения, теперь значения передаются. Но старые значения не очищаются, он показывает старые значения, даже если новые значения присваиваются полю id и содержимого и отображаются на экране. Почему это так? – user2323308

+0

Мне нужно позвонить ModelState.Clear(). Каждый раз получать новые значения. – user2323308

+0

Действительно, обычно, когда вы возвращаетесь к просмотру из вашего действия post, это означает, что проверка не удалась, и вы хотите отобразить представленные данные, чтобы исправить их. Вот почему 'ModelState' сохраняет старые значения. Когда он будет успешным, вы обычно перенаправляете на действие «GET», при необходимости, с некоторыми параметрами. Но вы также можете очистить «ModelState», если он вам подходит. –

3

Я думаю, что значения @Html.DisplayFor не представлены.

Попробуйте включить @Html.HiddenFor для получения того же значения.

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