为什么编辑屏幕显示我正在编辑的值,但是当我尝试保存时,Edit HTTPPOST有一个空对象?值“”无效
获取我追查到的错误,但没有看到原因。我有一个用于下拉列表的类,所以它只有AdvisoryTypeID和AdvisoryType。但现在我正在为用户创建屏幕来查看网格中的所有内容(索引),添加新的(创建)并更改现有的(编辑)。索引屏幕从数据库中读取没有问题。编辑也是如此。创建不需要。
但是编辑和创建在HTTPPOST上给出相同的错误。错误是“价值”,无论我输入“无效”。调试代码打开了原因:在“advisoryTypes”变量为空的原因,我不明白:
[Authorize]
[HttpPost]
public ActionResult Edit(AdvisoryTypes advisoryType)
{
try
{
if (ModelState.IsValid) //never get past this because it's null above
etc....
}
我比较这到另一个屏幕,做编辑和
控制器(编辑后)创建正常,它们是相同的(例如,除了字段名称)。我很难过。
MODEL
public class AdvisoryTypes
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int AdvisoryTypeID { get; set; }
[Display(Name = "Type")]
[Required]
public string AdvisoryType { get; set; }
}
CONTROLLER(用于编辑获取)
[Authorize]
public ActionResult Edit(int id = 0)
{
AdvisoryTypes advisoryType = db.AdvisoryType.Find(id);
if (advisoryType == null)
{
return HttpNotFound();
}
return View(advisoryType);
}
VIEW
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'。“
结果是必须手动创建控制器,方法是复制/粘贴另一个控件并进行更改,然后以相同的方式创建我的视图。我怀疑这是所有相关但可能不是。如果这证明无关,我会删除这个并作为另一个问题发布。
无法投射类型...您似乎在混合EF6和EF5。不幸的是,这是不可能的。我不认为MVC目前支持EF6。 – Pawel