1

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

1 回答 1

2

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

ModelState.IsValid = false;

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

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

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

于 2009-08-20T20:07:52.133 回答