Сообщение проверки MVC

#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)