在Edit
视图的此代码中,会显示正确的供应商名称文本,但在我清空其文本框并按“保存”时不会对其进行验证。 Vendor是Order模型的属性,VendorName是Vendor模型中的属性。它们涉及参考。我的表单并非都输入到单个表中,而是输入到卫星表中。
<%= Html.TextBox("Vendor.VendorName")%>
<%= Html.ValidationMessage("Vendor.VendorName")%>
为什么验证没有发生?
这似乎有效,但对我来说似乎是个黑客攻击:
using M = HelloUranus.Models
//...
namespace HelloUranus.Controllers
{
public class OrderDetailController : Controller
{
//...
private M.DBProxy db = new M.DBProxy();
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection collection)
{
//...
var orderDetail = db.GetOrderDetail(id);
//...
try
{
if (string.IsNullOrEmpty(Request.Form["Vendor.VendorName"]))
{
throw new Exception();
}
UpdateModel(orderDetail);
db.Save();
return RedirectToAction("Details", new {id = orderDetail.odID } );
}
catch
{
ModelState.AddRuleViolations(orderDetail.GetRuleViolations());
return View(orderDetail);
}
//...
}
//...
}
答案 0 :(得分:2)
你写过任何验证码吗?您必须在控制器中手动验证它。如果你:
ModelState.IsValid = false;
例如,在控制器中,您将看到一些验证。这将触发View上的ValidationSummary显示。要实际向单个表单元素添加验证,请使用:
ModelState.AddModelError("Vendor.VendorName", string.Format("Vendor name must be at least {0} characters.",10));
请注意,这也会将ModelState设置为无效状态,从而触发ValidationSummary。