尽管我在文本框中键入了一些内容,但页面上的元素返回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);
}
我认为您需要发布到正确的ActionName。您使用@using (Html.BeginForm())
,它将发布到控制器的索引中。但你有Create
。所以把表格指向那个。
@using (Html.BeginForm("Create", "Home", FormMethod.Post))
首先确保您有正确的视图模型属性设置:
public class Category
{
public int ID { get; set; }
public string Name { get; set; }
}
然后指向操作名称和控制器名称,它们在BeginForm
帮助程序中处理POST操作
@* 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