我要创建的是一个显示模型属性的视图,以及更改 1 个属性的选项,在这种情况下,我为其创建了一个助手的“状态”。
我已经到了正确修改和更改更改的属性的地步,但是现在正在重置其他属性的值。
我猜这是因为发布数据用于修改模型,并且由于某些属性是不可更改的,所以我猜想使用空值来更新模型?
这是我的控制器 GET:
public ActionResult Edit(int id = 0)
{
ProductCode productcode = db.ProductCodes.Find(id);
if (productcode == null)
{
return HttpNotFound();
}
return View(productcode);
}
这里是POST:
[HttpPost]
public ActionResult Edit(ProductCode productcode)
{
if (ModelState.IsValid)
{
db.Entry(productcode).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(productcode);
}
最后是视图:
@model PortalTMC.Models.ProductCode
@{
ViewBag.Title = "Change status";
}
<h2>Status veranderen</h2>
<br />
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>ProductCode</legend>
@Html.HiddenFor(model => model.Id)
@Html.LabelFor(model => model.Id, "Id")
@Html.DisplayFor(m => m.Id)
@Html.LabelFor(model => model.Code, "Product code")
@Html.DisplayFor(m => m.Code)
@Html.LabelFor(model => model.Role, "Rol (1 = Administrator | 2 = Trainer | 3 = User)")
@Html.DisplayFor(m => m.Role)
<div class="editor-label">
@Html.LabelFor(model => model.Status, "Status")
</div>
<div class="editor-field">
@Html.EnumDropDownListFor(model => model.Status)
</div>
<p>
<input type="submit" value="Verander status" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Terug naar lijst", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
任何帮助将非常感激
更新:
不幸的是,在 post 方法中包含或排除属性不起作用:/例如,如果我将 post 方法替换为:
[AcceptVerbs(HttpVerbs.Post)]
[HttpPost]
public ActionResult Edit([Bind(Exclude = "Role, Code")] ProductCode productcode)
{
if (ModelState.IsValid)
{
db.Entry(productcode).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(productcode);
}
我仍然以重置角色和代码结束..
产品代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace PortalTMC.Models
{
public class ProductCode
{
//PK
[Key]
public int Id { get; set; }
public string Code { get; set; }
public ProductCodeStatus Status { get; set; }
public int Role { get; set; }
}
public enum ProductCodeStatus
{
Active,
Inactive,
Pending,
}
}