Все мои текстовые поля возвращают ноль, что мне делать?
У меня есть проблема в отношении элементов на моих страницах, возвращающихся 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 ответа
Я думаю, вам нужно опубликовать правильный ActionName. Ты используешь @using (Html.BeginForm())
, который будет публиковать в индекс контроллера. Но у тебя есть Create
, Так что укажите форму на это.
@using (Html.BeginForm("Create", "Home", FormMethod.Post))
Сначала убедитесь, что вы правильно настроили свойства viewmodel:
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);
}
Связанная проблема: