我正在使用MVC为我的ViewModel创建标准的创建/编辑表单。我的创建工作非常好,现在我已经进入我的编辑表单,并且ViewModel的ID被传递为0,即使我可以看到ID元素资源管理器(& web UI)ID是设置为10004.我尝试将所有字段绑定到我的[HttpPost]编辑控制器方法,但ID仍为0.任何想法?
这是我的代码片段(我有太多字段等发布所有内容,所有其他字段都是正确的。)
提前致谢!
视图模型
public class Header_VM
{
[DisplayName("Contract ID")]
public int Contract_Key { get; set; }
etc
}
查看
@model (root).Header.Header_VM
@{
ViewBag.Title = "Edit";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Edit Header: @Model.Name</h2>
@using (Html.BeginForm("Edit", "Header", FormMethod.Post, new { name = "EditForm" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal" ng-app="HeaderApp">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Contract_Key, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DisplayFor(model => model.Contract_Key)
</div>
etc...
</div>
}
我在&#34; int NewID ...&#34;上有一个断点,此时Contract_Key为0。
控制器
[HttpPost]
public ActionResult Edit([Bind(Include = "Contract_Key, etc...")] Header_VM header)
{
int NewID = DB.Header_Insert(header);
return RedirectToAction("Details", "Header", new { Contract_Key = NewID });
}
答案 0 :(得分:2)
DisplayFor
辅助方法生成HTML标记,以显示属性值。因此,如果您检查页面源(查看源代码),您将看到Contract_Key属性的label
标记的标记。提交表单时,仅提交输入表单字段值,而不是标签/ div值
您需要在表单中输入一个输入表单字段,其中name属性值设置为"Contract_Key"
。
您可以使用HiddenFor
辅助方法生成隐藏的输入元素,其name属性值与属性名称匹配。
@Html.DisplayFor(model => model.Contract_Key)
@Html.HiddenFor(model => model.Contract_Key)
或者只是手写隐藏输入
<input type="hidden" name="Contract_Key" value="@Model.Contract_Key" />