#asp.net-mvc #asp.net-mvc-4
#asp.net-mvc #asp.net-mvc-4
Вопрос:
Мой код выглядит следующим образом, и сообщение об ошибке не отображается:
Index.cshtml
@model WebApp.Models.OrderItems
@using (Html.BeginForm("SaveToDB", "Home", FormMethod.Post, new { @class = "form-group", role = "form" }))
{
@Html.Partial("Information")
}
Частично : Information.cshtml
@model WebApp.Models.OrderItems
<div class="col-lg-4">
<div class="form-group">
<label for="input1" class="col-lg-4 control-label">@Html.LabelFor(model => model.CLInfo.ClientName)</label>
@Html.EditorFor(model => model.CLInfo.ClientName, new { style = "width:250px" })
@Html.ValidationMessageFor(model => model.CLInfo.ClientName)
</div>
</div>
Модель :
public class OrderItems
{
public InfoCLInfo{ get; set; }
}
Модель: класс для информации
public class Info
{
[Display(Name = "Client Name")]
[Required]
public string ClientName{ get; set; }
}
Контроллер
[HttpPost]
[MultipleButton(Name = "action", Argument = "SaveToDB")]
public ActionResult SaveToDB(OrderItems Client)
{
var errors = ModelState.Values.SelectMany(v => v.Errors);
if (ModelState.IsValid)
{
if (_db == null)
_db = new OrderDB();
OrderItems ClientOrig = Session["Clientobj"] as OrderItems;
ClientOrig.CLInfo = Client.CLInfo;
Session["Clientobj"] = null;
}
return RedirectToAction("Index", "Home");
}
[Authorize]
public ActionResult Index (OrderItems Client)
{
int ClientID = Convert.ToInt32(Session["Client"]);
if ClientID == 0)
{
ClientID = 2;
Session["Client"] = ClientID;
}
if (Session["Clientobj"] == null)
{
Client = new OrderItems();
Client.CLOrderID = 123;
Session["Clientobj"] = Client;
}
else
{
Client = Session["Clientobj"] as OrderItems
}
return View(Client);
}
при публикации состояния модели.isValid возвращает false, что соответствует true, но у меня нет никакого сообщения, чтобы сообщить пользователю, где ошибка, которую нужно исправить.
Я попытался добавить: @Html.ValidationSummary(true) после начальной формы, но это не помогло.
Любая идея, пожалуйста
Спасибо
Комментарии:
1. Можете ли вы также опубликовать соответствующий код контроллера?
2. добавлен связанный с @JustinHelgerson код контроллера
Ответ №1:
Вы не можете использовать RedirectToAction, если хотите сохранить состояние модели. Все ошибки и то, что не сохраняется в объекте ModelState, и когда вы перенаправляете на действие, оно выполняет новое действие get, которое начинается с чистого листа.
Вам нужно вернуть представление, как вы делаете в исходном действии.
Комментарии:
1. Именно поэтому я попросил соответствующий код контроллера!
2. Спасибо, если я добавлю: return View(«Index»); в Information.cshtml модель имеет значение null для:
<div class="form-group"> <label for="input1" class="col-sm-2 control-label">Country</label> @Html.DropDownListFor(model => model.CLGInfo.Country, new SelectList(Model.CLInfo.Country, "idCountry", "Country")) </div>
сообщение об ошибке: ссылка на объект не установлена для экземпляра объекта.3. @ProtoCUS — я повторюсь. Вам нужно вернуть представление, КАК В ИСХОДНОМ ДЕЙСТВИИ , что также означает передачу модели. Итак, вы
return View("Index", Client)