即使我在文本框中输入了某些内容,我在页面上返回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);
}
答案 0 :(得分:2)
我认为您需要发布到正确的ActionName。您使用@using (Html.BeginForm())
,它将发布到控制器的索引中。但是您有Create
。因此,将表格指向该页面。
@using (Html.BeginForm("Create", "Home", FormMethod.Post))
答案 1 :(得分:1)
确保首先设置正确的viewmodel属性:
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);
}
相关问题: