【发布时间】:2016-11-10 16:33:42
【问题描述】:
我目前正在学习有关 MVC 5 的教程,但我一直在思考如何在不绑定编辑方法中的字段的情况下对用户输入的字段执行验证检查。
我已经有一个编辑页面,但这会在开始时绑定所有字段 - 我正在遵循的教程清楚地表明我不应该这样做。
我的原始代码如下。由于我在开始时绑定了所有字段,因此可以使用 vans 执行检查。fieldname 如下所示,使用 'if (vans.AssetID == 20)'
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "AssetID,Batch_Number,Customer_Account_Holder,Dealer_ID, ")] Vans__ vans)
{
if (vans.AssetID == 20) //Example - check if data entered for AssetID is 20
{
//do something
}
if (ModelState.IsValid)
{
db.Entry(vans__).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(vans__);
}
在我遵循的教程中,我被指示不要在开始时绑定所有内容,而是使用如下代码:
public ActionResult EditPost(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
//In here vans is the original values and not from the form.
Vans__ vans = db.Vans__.Find(id);
//Here how can I check if AssetID is a certain number returned from the form?
if (TryUpdateModel(vans, "", new string[] { "AssetID" }))
{
try
{
db.SaveChanges();
return RedirectToAction("Index");
}
}
}
我知道 TryUpdateModel 的白名单会更容易、更安全,我只是在努力掌握如何访问从表单返回到控制器的数据。
如何访问模型以添加自己的验证检查?
感谢所有帮助,谢谢。
【问题讨论】:
-
寻找更好的教程。
-
@StephenMuecke 对于我们希望编辑的特定字段,我们是否可以更好地绑定到较小的视图模型,然后在 UpdateDB 上将视图模型绑定到数据库实体模型?这也是我们看到的一种做法。例如,当只更新 2 个字段时,绑定方法从一个类发送所有 30 个字段似乎很疯狂。
-
是的,你不应该在编辑时在视图中使用数据模型。
-
@StephenMuecke 感谢斯蒂芬,我非常乐意接受您的建议。我们将坚持使用 Bind,但仅对我们希望编辑/更新的特定项目使用 ViewModel。
-
@AndyDonegan,使用视图模型时不需要
BindAttribute
标签: c# asp.net-mvc updatemodel