все мои текстовые поля возвращают ноль, что мне делать? - PullRequest
0 голосов
/ 27 января 2019

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

Вот мое мнение:

@model WebApplication1.Models.Category

@{
    ViewBag.Title = "Create Category";
}

<h2>@ViewBag.Title</h2>

@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.Name, htmlAttributes: new { @class 
        ="control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextBoxFor(model => model.Name, new { htmlAttributes = 
            new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Name, "", 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>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

Вот мое действие контроллера:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,Name")] Category category)
{
    if (ModelState.IsValid)
    {
        db.Categories.Add(category);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(category);
}

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Сначала убедитесь, что вы правильно настроили свойства модели представления:

public class Category
{
    public int ID { get; set; }

    public string Name { get; set; }
}

Затем укажите имя действия и имя контроллера, который обрабатывает действие POST в BeginForm помощник:

@* assumed the controller name is 'CategoryController' *@
@using (Html.BeginForm("Create", "Category", FormMethod.Post))
{
    // form contents
}

И, наконец, измените имя параметра, чтобы избежать конфликта имен в связывателе модели по умолчанию, а также удалите BindAttribute, поскольку в действии POST в качестве параметра указан строго типизированный класс viewmodel:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Category model)
{
    if (ModelState.IsValid)
    {
        db.Categories.Add(model);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(model);
}

Связанная проблема:

Действие POST с передачей нулевого ViewModel

0 голосов
/ 27 января 2019

Я думаю, вам нужно опубликовать правильный ActionName. Вы используете @using (Html.BeginForm()), который будет публиковать данные в индексе контроллера. Но у вас есть Create. Так что укажите на это форму.

@using (Html.BeginForm("Create", "Home", FormMethod.Post))
...