我正在使用面向.NET 4.5的Visual Studio 2013,MVC 5.1,EF 6.0。代码优先,使用默认连接字符串。
我有一个非常简单的实体,名为SchoolModel
,如下所示。
public class SchoolModel
{
[HiddenInput(DisplayValue = false)]
[Key]
public int Id { get; private set; }
[Display(Name="School Name")]
[DataType(DataType.Text)]
public string Name { get; private set; }
}
我使用脚手架功能创建标准的MVC5视图/控制器组合,分别命名为School和SchoolController。我正在尝试将一些学校记录添加到数据库中。
创建视图:
@model OddsOnEnglish.GamingIELTS.Web.Models.SchoolModel
[snip]
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>SchoolModel</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Name, new {@class="col-md-2"})
<div class="col-md-offset-2 col-md-10">
@Html.EditorFor(model => model.Name)
</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>
}
SchoolController.Create:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Name")] SchoolModel schoolModel)
{
if (ModelState.IsValid)
{
db.Schools.Add(schoolModel);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(schoolModel);
}
上面的 db
是SchoolContext
的实例:
public class SchoolContext : DbContext
{
public SchoolContext() : base("name=DefaultConnection")
{
}
public DbSet<Models.SchoolModel> Schools { get; set; }
}
一切都很简单,基于各种教程。我的问题是,当我提交创建学校表单时,索引页面会再次显示新学校的新行,但不显示任何名称。查看数据库时,行会被添加到相应的表中,但Id列中只有一个值 - 没有名称。如果我在数据库中手动输入名称,那么它将显示在Web界面中。显然正在创建记录,但没有填充名称字段。
答案 0 :(得分:0)
只需将您的模型更正为:
public class SchoolModel
{
[HiddenInput(DisplayValue = false)]
[Key]
public int Id { get; set; }
[Display(Name="School Name")]
[DataType(DataType.Text)]
public string Name { get; set; }
}
您遇到的这个问题是因为私有设置块只是纠正它。