Как добавить ненавязчивую проверку для полей шаблона HTML, чего нет в модели - PullRequest
0 голосов
/ 28 января 2012

Я получил шаблон, созданный для настраиваемого поля почтового индекса.

Мой код шаблона указан ниже:

@{
    string model = Model ?? string.Empty;
    string zipFirst = "";
    string zipSecond = "";
    if(!String.IsNullOrEmpty(model) && !String.IsNullOrWhiteSpace(model))
    {
        var values = model.Split('-');
        if(values.Count() == 2)
        {
            zipFirst = values[0] ?? string.Empty;
            zipSecond = values[1] ?? string.Empty;
        }
    }
    var pName = ViewData.ModelMetadata.PropertyName;
    var zipAreaId = "#" + pName + "zipcodearea";
}
<div id="@(pName)zipcodearea">
    <input type="text" maxlength="5" id="zipcodefirst" name="@(pName)codefirst" value="@(zipFirst)" style="width:136px"/> -
    <input type="text" maxlength="4" id="zipcodesecond" name="@(pName)codesecond" value="@(zipSecond)" style="width:120px"/>
    @Html.HiddenFor(m => m, new { @class = "generatedZipField"})
</div>
<script type="text/javascript">
    jQuery(function ($) {
        $('@(zipAreaId) #zipcodefirst').autotab({ target: '@(pName)codesecond', format: 'numeric' });
        $('@(zipAreaId) #zipcodesecond').autotab({ previous: '@(pName)codefirst', format: 'numeric' });
        $('@(zipAreaId)').zipcode();
    });
</script>

И я использую его так:

[UIHint("ZipCode")]
[Display(Name = "Zip Code")]
public string Zip { get; set; }

Как вы видите в моем шаблоне, у меня есть два поля, которые не включены в модель.

Это #zipcodefirst и # zipcodesecond.

Что мне нужно сделать, это иметь два отдельных поля дляполный почтовый индекс.

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

В чем проблема?

Мне нужно добавить ненавязчивую проверку mvc для них двух полей, чего нет в модели #zipcodefirst и #zipcodesecond.

правила проверки

  • поле zipcodefirst должно быть заполнено первым
  • , затем поле zipcodefirst заполнено, вы можете заполнить второе поле
  • второе поле должно иметь4 цифры в нем
  • первое поле должно иметь пять цифр
  • не может заполнить второе поле, пока первое не заполнено или заполнено некорректно

Я борюсь с частью проверки для довольнокакое-то время .... :( Как я мог бы добиться того, чтобы через ненавязчивые инструменты проверки mvc3?

любая помощь будет высоко оценена, ребята.

1 Ответ

2 голосов
/ 28 января 2012

Добавьте необязательную проверку данных в текстовое поле, добавив data-val="true" и используйте регулярное выражение для своего почтового индекса.

<input type="text" data-val="true" data-val-regex="Invalid zip code format" data-val-regex-pattern="YOUR REGEXP HERE" />

ОБНОВЛЕНИЕ

Если вы также хотите, чтобы оно требовалосьВы можете добавить атрибут data-val-required.

<input type="text" data-val="true" data-val-requred="Zip code is required" data-val-regex="Invalid zip code format" data-val-regex-pattern="YOUR REGEXP HERE" />

Дополнительная информация о проверке в MVC 3:

http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

...