Html.BeginForm опубликовать нулевую модель - PullRequest
0 голосов
/ 01 октября 2019

Я создал страницу создания с использованием скаффолдинга asp.net, и ниже находится моя страница для создания расходов.

@model ExpenCare.Models.ExpenseCategory

@{
    ViewBag.Title = "CreateExpenseCategories";
}

<div class="row">
    @Html.Partial("_RightSidePane")
    <div class="col-10 col-sm-8 col-xs-8 col-md-10">
        <div class="tab-content" id="nav-tabContent">
            <div class="tab-pane fade show active" id="list-Profile-Content" role="tabpanel" aria-labelledby="list-Profile">

                @using (Html.BeginForm("CreateExpenseCategories", "Admin", FormMethod.Post))
                {
                    @Html.AntiForgeryToken()

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

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

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

                </div>
            </div>
        </div>
    </div>

При создании этой страницы публикуйте данные в метод CreateExpenseCategories контроллера Admin.

public ActionResult CreateExpenseCategories(ExpenseCategory expense)
        {
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("http://localhost:1888/api/");

            var responseTask = client.PostAsJsonAsync("ExpenseCategories", expense);
            responseTask.Wait();

            var result = responseTask.Result;
            if (result.IsSuccessStatusCode)
            {
                return RedirectToAction("ExpenseCategories");
            }
            else
            {
                ModelState.AddModelError(string.Empty, "Server Error. Please contact administrator.");
            }
            return View("ExpenseCategories/CreateExpenseCategories", model: expense);
        }

Модель, использованная для создания этой страницы, выглядит следующим образом:

namespace ExpenCare.Models
{
    public class ExpenseCategory
    {
        public int Id { get; set; }
        [Required]
        public string Expense { get; set; }
        public string Description { get; set; }

        public Company Company { get; set; }
    }
}

При создании расхода всегда выдается ошибка исключения null, а при отладке публикуемая модель данных равна нулю. Наверняка это небольшая проблема, потому что я делал другие страницы создания аналогичным образом и не сталкивался с какой-либо проблемой. Я, должно быть, упускаю небольшую вещь, и это может быть глупым вопросом, но я не могу найти, почему это приводит к ошибке с нулевым исключением в сообщении.

Ответы [ 2 ]

1 голос
/ 03 октября 2019

В вашей модели поле Id не имеет значения NULL. Возможно, вы должны добавить вход или скрытый вход для него, чтобы исправить привязку модели:

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

Revise: Я проверяю этот случайи привязка модели в mvc работает и установка значение по умолчанию для id. Целиком в отсутствие ввода в форме привязки модели в MVC по-прежнему работает. Такое поведение имеет смысл, поскольку все поля по умолчанию являются необязательными, и мы можем установить обязательный атрибут для принудительного ввода их.

1 голос
/ 02 октября 2019

Я думаю, что проблема заключается в использовании Html.EditorFor,

Попробуйте это

 @Html.TextBoxFor(model => model => model.Expense,new { @class = "form-control" })

или

 @Html.EditorFor(model => model.Expense,null,"Expense",new { htmlAttributes = new { @class = "form-control" } } )

Правка решена

Свойство типа ExpenseCategory имеет тот же параметр «расход». Измените

public ActionResult CreateExpenseCategories(ExpenseCategory expense)

на

public ActionResult CreateExpenseCategories(ExpenseCategory model)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...