为什么编辑屏幕显示我正在编辑的值,但是当我尝试保存时,编辑 HTTPPOST 有一个空对象?
得到一个我已经追踪但没有看到原因的错误。我有一个用于下拉列表的类,所以它只有 AdvisoryTypeID 和 AdvisoryType。但现在我正在创建屏幕供用户查看网格中的所有内容(索引)、添加新的(创建)和更改现有的(编辑)。从数据库读取索引屏幕没有问题。编辑也是如此。创建不需要。
但是 Edit 和 Create 在 HTTPPOST 上都给出了相同的错误。错误是“值'无论我输入什么'都是无效的”。调试代码出现了原因:“advisoryTypes”变量为空,原因我不明白:
控制器(用于编辑帖子)
[Authorize]
[HttpPost]
public ActionResult Edit(AdvisoryTypes advisoryType)
{
try
{
if (ModelState.IsValid) //never get past this because it's null above
etc....
}
我将此与另一个可以很好地编辑和创建的屏幕进行了比较,它们是相同的(例如,字段名称除外)。我难住了。
模型
public class AdvisoryTypes
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int AdvisoryTypeID { get; set; }
[Display(Name = "Type")]
[Required]
public string AdvisoryType { get; set; }
}
控制器(用于编辑获取)
[Authorize]
public ActionResult Edit(int id = 0)
{
AdvisoryTypes advisoryType = db.AdvisoryType.Find(id);
if (advisoryType == null)
{
return HttpNotFound();
}
return View(advisoryType);
}
看法
model TheNewSolution.Models.AdvisoryTypes
@{
ViewBag.Title = "Edit Advisory Type";
}
<h2>Edit Advisory Type</h2>
@*<br />*@
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Advisory</legend>
<table>
<tr>
<td>
@Html.HiddenFor(model => model.AdvisoryTypeID)
<div class="editor-label">
@Html.LabelFor(model => model.AdvisoryType)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.AdvisoryType)
@Html.ValidationMessageFor(model => model.AdvisoryType)
</div>
</td>
</tr>
</table>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
第二部分 现在一些奇怪的背景:这是自将 EF 从 5 更新到 6 alpha3 以来我创建的第一个模型/控制器/视图(必须这样做,因为我在同一个项目中有 POCO 和 edmx,这解决了那个错误)。我手动创建了模型。当我尝试通过向导创建控制器时,向导给出了错误“无法检索 ProjectName.Models.AdvisoryProviders 的元数据”。无法将类型为“System.Data.Entity.Core.Objects.ObjectContext”的对象转换为类型'System.Data.Objects.ObjectContext'。”。
结果是必须通过复制/粘贴另一个控制器并进行更改来手动创建控制器,然后以相同的方式创建我的视图。我怀疑这都是相关的,但也许不是。如果这证明不相关,我将删除它并作为另一个问题发布。