Проверка ввода TextBox для списка, который является свойством MVC3 ViewModel - PullRequest
0 голосов
/ 13 февраля 2012

Я понимаю, что немного опоздал на вечеринку, но ... Я работаю над своим первым проектом MVC и смог разобраться с большинством дел, которые необходимо сделать. Большая часть проекта просто читает данные и закачивает данные в графики. Однако у меня есть один вид, модель которого выглядит следующим образом (свойства родительского класса здесь не важны):

public class Class1 : ParentClass
{
public List<ChildClass> ChildClassList{get;set;}
}

и ChildClass выглядит так:

public class ChildClass
{
   public int Property1{get;set;}
   public int Property2{get;set;}
   public string Property3{get;set;}

   public int? ID{get;set;}
   [Editable(true)]
   public decimal? Property4{get;set;}
}

Теперь получение данных не является проблемой. Я могу перебрать список и создать таблицу для редактирования следующим образом:

<% foreach(var g in Model.ChildClassList){%>
   <tr>
     <td style="text-align: right;">
    <%= Html.Label(g.Property3)%>
 </td>
     <td>
        <%=Html.TextBox(Model.ParentProperty.ToString() + "_" + g.Property2, (g.Property4.HasValue ? g.Property4.Value.ToString("C") : "$0.00"))%>
     </td>
   </tr>
<% }%>

После прохождения этого сайта в течение последних нескольких дней меня осенило, что я могу проверить ввод на стороне сервера в методе POST (в нижней части формы есть кнопка «Сохранить») , но (а) как я могу получить сообщение об ошибке проверки пользователю, (б) выполнить проверку на стороне клиента?.

Я должен также упомянуть, что в этом представлении используются значения в списке для создания части диаграммы до ее отображения в виде таблицы.

1 Ответ

0 голосов
/ 13 февраля 2012

На стороне сервера в действии [HttpPost] вы можете проверить действительность модели следующим образом:

[HttpPost]
public ActionResult Save(Class1 model)
{
   if (!ModelState.IsValid)
      return View(model);
   // Code to save model.
}

Вам также необходимо обновить свой просмотр, чтобы показать ошибки:

<%= Html.ValidationSummary(false, "Please fix these errors.")
<% foreach(var g in Model.ChildClassList){%>
   <tr>
     <td style="text-align: right;">
    <%= Html.Label(g.Property3)%>
 </td>
     <td>
        <%=Html.TextBox(Model.ParentProperty.ToString() + "_" + g.Property2, (g.Property4.HasValue ? g.Property4.Value.ToString("C") : "$0.00"))%>
        <%= Html.ValidationMessageFor(model => g.Property4)
     </td>
   </tr>
<% }%>

Если вы хотите включить его на стороне клиента, вам нужно использовать ненавязчивую проверку клиента , которую вы можете сделать, обновив ваш web.config:

<configuration>
    <appSettings>
        <add key="ClientValidationEnabled" value="true"/>
        <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    </appSettings>
</configuration>

Также вам понадобятся следующие библиотеки JS:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"           type="text/javascript"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js"      type="text/javascript"></script>
<script src="//ajax.microsoft.com/ajax/jQuery.Validate/1.7/jQuery.Validate.min.js" type="text/javascript"></script>
<script src="//ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>

В примечании стороны , попробуйте избежать циклов для визуализации вашего представления.Это ненужный кодовый суп, которого можно избежать с помощью шаблонов редактора.

...