Как сохранить данные ViewBag после публикации формы?

Итак, у меня есть ViewBag.Something и эти данные генерируются случайным образом. На мой взгляд, я установил это на ярлык so @Html.LabelFor(m => m.Something, (string)ViewBag.Something). Это хорошо работает, но когда я отправляю форму, могут быть ошибки, и если есть ошибки, мне нужно, чтобы эта метка оставалась прежней, я больше не хочу динамических/случайных данных, поэтому я бы не вызывал метод контроллера, который сгенерировал этот ViewBag. Есть ли способ сохранить это значение без наличия какой-либо частной переменной в моем контроллере? Какой-то хороший способ, который делает MVC/Razor это?

3 ответов


Вариант 1:

передайте значение " ViewBag.Что-то" контроллеру, используя значения маршрута:

@Html.ActionLink("ButtonText", "ActionName", new { Something = @ViewBag.Something })
2: Вы можете использовать данных tempdata.
public ActionResult Index()
{
 var Something = "YOURVALUE";
 TempData["Something"] = Something;
.......
}


public ActionResult OtherAction()
{
    var Something = TempData["Something "];
    ...........
}

Передача Состояния Между Методами Действия

методы действия могут передавать данные в другое действие, например, если ошибка возникает при разноске формы или если метод должен перенаправляться на дополнительные методы, как это может произойти при направлении пользователя к представлению входа в систему, а затем обратно к исходному методу действия.

метод действия может хранить данные в объекте TempDataDictionary контроллера перед вызовом метода RedirectToAction контроллера для вызова следующего действия. Значение свойства TempData хранится в состоянии сеанса. Любой метод действия, вызываемый после установки значения TempDataDictionary, может получать значения из объекта, а затем обрабатывать или отображать их. Значение TempData сохраняется до тех пор, пока оно не будет прочитано или пока время сеанса истекло. Сохранение TempData таким образом включает такие сценарии, как перенаправление, поскольку значения в TempData доступны за пределами одного запроса.


в get настройте модель, установите ее динамически и когда return view() выполняется, do return view(model). Затем в представлении настройте скрытое поле, которое может продолжать передавать необходимое значение. Я выбрал этот маршрут, потому что мне не нужно беспокоиться о коде сервера, чтобы сделать эту работу на посте, и мне не нужно беспокоиться о каких-либо сеансах.


отображение сообщения в viewbag после публикации (я использую этот метод)

ActionResult SubmitUser(){

  ViewBag.Msg =TempData["Msg"];

  return view();
}


[HtttpPost]
ActionResult SubmitUser(){

 TempData["Msg"] ="Submitted Successfully"];

  return view();
}

значение send to get method..