ASP.NET — Отправка формы не передает данные

#c# #asp.net

#c# #asp.net

Вопрос:

У меня есть такой класс:

 public class saveModel
    {
        public int ID{ get; set; }
        [DisplayName("Area")]
        public string Area { get; set; }
        public string AreaDescription { get; set; }
        [DisplayName("Model")]
        public string Model { get; set; }
        [DisplayName("Description")]

}
 

и в моем контроллере у меня есть это:

 [Authorize]
        public ActionResult ModelEdit(int id)
        {

            saveModel model = webService.getModel(id);

            return View(model);
        }

        [Authorize]
        [HttpPost]
        public ActionResult ModelEdit(saveModel model)
        {
            return View();
        }
 

и в поле зрения у меня есть это:

 @model MyApp.Models.saveModel

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.ModelID, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.ModelID, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.ModelID, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Area, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Area, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Area, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.AreaDescription, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.AreaDescription, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.AreaDescription, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Model, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Model, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Model, "", new { @class = "text-danger" })
            </div>
        </div>

<div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>

</div>
}
 

Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю кнопку сохранения, она переходит к правильному методу, но моя saveModel пуста при отправке…что я делаю не так?

Ответ №1:

попробуйте включить атрибут from body, как показано ниже

 [Authorize]
[HttpPost]
public ActionResult ModelEdit([FromBody]saveModel model)
{
    return View();
}
 

если это не решит вашу проблему, то в ваше поле ID передается недопустимое или пустое значение. Вы можете проверить свойство ModelState, которое будет указывать на нужное поле.

Комментарии:

1. Это решение не сработало, я проверю ModelState …. как мне это сделать?

2. Выясните, как проверить состояние модели… Я получил эту ошибку: Exception = {«Преобразование параметра из типа ‘System. Строка’ для ввода ‘MyApp.Models.saveModel’ не удалась, поскольку ни один конвертер типов не может конвертировать между этими типами «.}

3. Ааааа, проблема в модели. Модели это не нравится.

4. Я собираюсь изменить его название на Title