ASP.Net MvC Framework, тег Html.ValidationMessage - PullRequest
1 голос
/ 21 августа 2009

В этом коде в представлении 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 Ответ

2 голосов
/ 21 августа 2009

Вы написали код подтверждения? Вы должны вручную проверить его в вашем контроллере. Если вы:

ModelState.IsValid = false;

в контроллере, например, вы увидите некоторую проверку. Это вызовет ValidationSummary в представлении, которое будет показано. Чтобы фактически добавить проверку к одному элементу формы, используйте:

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

Обратите внимание, что это также приведет к недопустимому состоянию ModelState и, следовательно, к запуску ValidationSummary.

...