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 に答える