2009-08-20 2 views
1

В этом коде в представлении Edit отображается правильный текст имени поставщика, но он не проверяется, когда я пустую его текстовое поле и нажмите «Сохранить». Поставщик является свойством модели Order, а VendorName является собственностью модели поставщика. Они связаны между собой. Моя форма не все вводится в одну таблицу, но также и на спутниковые таблицы.ASP.Net MvC framework, Html.ValidationMessage tag

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

ответ

2

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

ModelState.IsValid = false; 

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

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

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

+1

ModelState.AddModelError автоматически устанавливает IsValid в false. –

+0

Ты прав, моя ошибка. Я знал, что вам нужно помнить * что-то *, но что-то устанавливает ModelStateDictionary, чтобы повторно заполнить форму неверными данными, используя SetModelValue. Лемм отредактировал это. – JoshJordan

+0

Где в рабочем процессе я бы выполнил ModelState.AddModelError ("Vendor.VendorName", "*")? Если это сделано в разделе try части «Сохранить» метода действия «Редактировать-Опубликовать», он выдает исключение, так как ModelState.IsValid становится ложным. – JonathanWolfson

Смежные вопросы