2015-06-05 3 views
-1

Я довольно новичок в MVC, и у меня возникли проблемы с сохраняющимися значениями на странице POST. Ниже приведен упрощенный вариант того, что я пытаюсь сделать. В основном у меня есть форма, где я показываю имя пользователя и другие данные. В POST ActionResult, если бизнес-правила не работают, страница должна вернуться к текущему виду, иначе будет продолжаться, но на моем POST имя и адрес, которые я установил в GET, не отображаются в POST для модели представления, в результате чего отправляются нулевые значения назад в обратном представлении (модель). Существуют ли способы сохранения значений без возврата их в базу данных для их извлечения?MVC ViewModel null значения в POST

Модель

public class HomeModel 
{ 
    public string Forename { get; set; } 
    public string Surname { get; set; } 
    public string AddressLine1 { get; set; } 
    public bool Continue { get; set; } 
} 

Контроллер

[HttpGet] 
public ActionResult Index() 
{ 
    var model = new HomeModel(); 
    model.Forename = "Joe"; 
    model.Surname = "Boe"; 
    model.AddressLine1 = "Unknown"; 

    return View(model); 
} 

[HttpPost] 
public ActionResult Index(HomeModel homeModel) 
{ 
    if (homeModel.Continue) 
     return RedirectToAction("Index", "Form2"); 
    else 
     return View(homeModel); 
} 

Посмотреть

@using (Html.BeginForm()) 
    { 
     @Html.LabelFor(m => m.Forename, Model.Forename)<br /> 
     @Html.LabelFor(m => m.Surname, Model.Surname)<br /> 
     @Html.LabelFor(m => m.AddressLine1, Model.AddressLine1)<br /><br /> 
     @Html.CheckBoxFor(m => m.Continue)<br /><br /> 
     <input type="submit" value="Click" /> 
    } 

ответ

1

Вы можете использовать скрытое поле:

@Html.HiddenFor(model => model.ID) 

Затем это сообщение будет отправлено обратно на сервер. Это увеличит ваши данные для этой должности, а для больших форм нецелесообразно.

При этом вы, вероятно, лучше пересоздаете данные для загрузки страницы или выполняете кеширование на стороне сервера, так как в противном случае вы рискуете вводить плохие данные. Это может не иметь значения для вас, если оно читается только.

+0

Я думаю, что идея кэширования может быть маршрутом, который я возьму. – Dev118

3

LabelFor не создает тип HTML input, поэтому он не включен в postback. Вы можете сделать их TextBoxFor или создать HiddenFor s рядом с вашими ярлыками, чтобы они не возвращались на сервер

+0

Я, вероятно, не хочу хранить длинный список скрытых элементов в представлении – Dev118

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