ASP.Net MvC框架,Html.ValidationMessage标记

时间:2009-08-20 20:05:40

标签: asp.net-mvc html-helper

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);
        }
        //...
      }
      //...
    }

1 个答案:

答案 0 :(得分:2)

你写过任何验证码吗?您必须在控制器中手动验证它。如果你:

ModelState.IsValid = false;
例如,在控制器中,您将看到一些验证。这将触发View上的ValidationSummary显示。要实际向单个表单元素添加验证,请使用:

ModelState.AddModelError("Vendor.VendorName", string.Format("Vendor name must be at least {0} characters.",10));

请注意,这也会将ModelState设置为无效状态,从而触发ValidationSummary。