Проверка на тип данных int asp .net mvc3 - PullRequest
1 голос
/ 30 марта 2012

Я получаю The value 'abc' is not valid for fieldName. как сообщение об ошибке.которое является сообщением об ошибке по умолчанию, и я хочу переопределить его более простым способом.на данный момент то, что я пробовал, перечислено ниже

  • [RegularExpression(@"^\d+$",ErrorMessage="enter numeric value")]
  • [Integer(ErrorMessageResourceType = typeof(appName.Resources.abc.Resource), ErrorMessageResourceName = "error_numeric")]
  • [RegularExpression("([1-9][0-9]*)")]
  • Range(1,int.max,ErrorMessage="enter numeric value")но не удалось изменить сообщение об ошибке по умолчанию.Предложите мне самый простой способ сделать это.

       using System;
       using System.Collections.Generic;
       using System.Linq;
       using System.Web;
       using System.ComponentModel.DataAnnotations; 
       using System.Web.Mvc;
    
      namespace blueddPES.ViewModels
         {
         public class ContactViewModel
            {
             [Integer(ErrorMessage="sdfdsf")]
             public int? hp { get; set; }
            }
    

Ответы [ 3 ]

11 голосов
/ 30 марта 2012

Самый простой способ - использовать Расширения аннотаций данных . Он имеет некоторые полезные атрибуты для таких вещей, как целые числа и т. Д.

Или вы можете написать свое собственное, как в: Как изменить валидацию сообщения 'data-val-number' в MVC при генерации его помощником

Редактировать : Добавлен полный образец после комментариев.

Я создал пример проекта vanilla MVC 3, а затем сделал следующее:

  1. Добавлен пакет NuGet DataAnnotationsExtensions.MVC3

  2. Добавлен класс модели:

    public class IntegerSample
    {
        [Required(ErrorMessage="Dude, please fill something in!")]
        [Integer(ErrorMessage="Are you stupid? Just fill in numbers only!")]
        public int? TestValue { get; set; }
    }
    
  3. Добавлен домашний контроллер:

    public class HomeController : Controller
    {
        //
        // GET: /Home/
        public ActionResult Index()
        {
            return View();
        }
    }
    
  4. Добавлен домашний вид:

    @using (Html.BeginForm()) {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>IntegerSample</legend>
            <div class="editor-label">
                @Html.LabelFor(model => model.TestValue)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.TestValue)
                @Html.ValidationMessageFor(model => model.TestValue)
            </div>
            <p>
                <input type="submit" value="Save" />
            </p>
        </fieldset>
    }
    

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

2 голосов
/ 30 марта 2012

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

0 голосов
/ 30 марта 2012

Мы используем расширенную версию Phil Haack MetadataProvider, которая может выполнять локализацию.

Взгляните на эту статью блога: http://haacked.com/archive/2011/07/14/model-metadata-and-validation-localization-using-conventions.aspx

В итоге:

  • Он определяет ключ ресурса, используя свойство типа type +, например, Person_FirstName
  • Он просматривает сообщения об ошибках, добавляя суффикс свойства проверки, например Person_FirstName_Required
  • Вы просто предоставляете файл ресурсов с этими записями.
...