2014-11-21 4 views
0

Я не могу понять, почему проверка фокуса, которая использует назначенное регулярное выражение, не работает в текстовом поле devex. когда я использую текстовое поле вне сети, он начинает работать по мере необходимости. Просьба предложить решение.Как проверить текстовое поле Devexpress внутри Devexpress Gridview в Javasacript

@Html.DevExpress().GridView(settings => 
{ 
    settings.Columns.Add(column => 
     { 
      column.FieldName = "InYear"; 
      column.Caption = "In Year"; 
      column.Width = 100; 
      column.ColumnType = MVCxGridViewColumnType.TextBox; 
      column.SortOrder = DevExpress.Data.ColumnSortOrder.Ascending; // Default 
      column.SortIndex = 1; 
      column.CellStyle.HorizontalAlign = HorizontalAlign.Left; 
      var txtProperties = column.PropertiesEdit as TextBoxProperties; 
      txtProperties.Width = Unit.Percentage(100); 
      txtProperties.MaxLength = 4; 
      txtProperties.DisplayFormatInEditMode = true; 
      txtProperties.ValidationSettings.RequiredField.IsRequired = true; 
      txtProperties.ValidationSettings.ValidateOnLeave = true; 
      txtProperties.ValidationSettings.RegularExpression.ValidationExpression = @"\d{4}"; 
      txtProperties.ValidationSettings.RegularExpression.ErrorText = "Expected format is: YYYY"; 
      txtProperties.ClientSideEvents.ValueChanged = String.Format("function (s, e) {{ OnValueChanged(s, e, '{0}', {1}); }}", "InYear", "0"); 
      column.SetDataItemTemplateContent(c => 
      { 
       if (!(bool)DataBinder.Eval(c.DataItem, "ReadOnly")) 
       { 
        Html.DevExpress().TextBox(txtSettings => 
        { 

         txtSettings.Name = "txtInYear_" + c.KeyValue.ToString(); 
         txtSettings.Width = Unit.Percentage(100); 
         txtSettings.Properties.MaxLength = 4; 
         txtSettings.Properties.DisplayFormatInEditMode = true; 
         txtSettings.Properties.ValidationSettings.ValidateOnLeave = true; 
         txtSettings.Properties.ValidationSettings.ValidationGroup = c.KeyValue.ToString(); 
         txtSettings.Properties.ValidationSettings.RegularExpression.ValidationExpression = @"[0-9]{4}"; 
         txtSettings.Properties.ValidationSettings.RegularExpression.ErrorText = "Expected format is: YYYY"; 
         txtSettings.Properties.ClientSideEvents.ValueChanged = String.Format("function (s, e) {{ OnValueChanged(s, e, '{0}', {1}); }}", c.Column.FieldName, c.KeyValue); 
        }).Bind(DataBinder.Eval(c.DataItem, c.Column.FieldName)).Render(); 


       } 
       else 
        Html.DevExpress().Label(lblSettings => 
        { 
         lblSettings.Name = "lblInYear_" + c.KeyValue.ToString(); 
         lblSettings.Width = Unit.Percentage(100); 
        }).Bind(DataBinder.Eval(c.DataItem, c.Column.FieldName).ToString()).Render(); 
      }); 
     }); 
}).Bind(Model).GetHtml() 

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

enter image description here Заранее спасибо

ответ

0

После долгой борьбы я получил следующий ответ:

  • Назначьте свойство группы проверки на вложенные элементы управления, как показано ниже

    txtSettings.Properties.ValidationSettings.ValidationGroup = c.KeyValue.ToString();

  • перебирать KeyValues ​​на стороне клиента, и вызовите функцию DevExpress Validate ASPxClientEdit.ValidateEditorsInContainer следующим образом, я представляют имя группы проверки

    вар IsValid =! ASPxClientEdit.ValidateEditorsInContainer (GridName.GetMainElement() , i)

Мой подход может быть не лучшим, но мне это очень помогло, я думаю, что это также было бы полезно для других, имеющих ту же проблему.

Спасибо .....

0

Когда вам нужно проверить TextBox? В режиме браузера или при редактировании? В настоящее время ваш TextBox требуется при редактировании строки. Попробуйте также установить свойство IsRequired для вашего TextBox в шаблоне.

txtSettings.Properties.ValidationSettings.RequiredField.IsRequired = true; 

Должно работать.

enter image description here

+0

hi, Это работает только тогда, когда текстовое поле пуст. если он содержит недопустимые данные, не показывает ошибку. Фактически представление по умолчанию содержит текстовое поле, которое всегда редактируется внутри grid-view. функция сохранения выполняется другой кнопкой с помощью запроса ajax. – Mayank

+0

Он отлично работает для меня. Я приложил скриншот к моему ответу. –

0

Переход через эту нить - MVC GridView - Client validation in default EditForm.

В случае, если вы работаете с формой Ajax, то я предлагаю вам использовать встроенные проверки вместо: GridView - How to use Microsoft validation with an AJAX form to validate the Model properties on the client side.

Больше Ссылки:
GridView - How to enable the client-side validation in the Edit Form How to correctly enable Model, Unobtrusive or jQuery Client validation
Client Validation in MVC3 with Gridview Template Form

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