Отключить проверку типа данных MVC «должно быть число» для поля - PullRequest
2 голосов
/ 30 марта 2011

У меня есть Telerik MVC ComboBox, который содержит список местоположений.Клиент хочет, чтобы конечный пользователь мог непосредственно вводить новые местоположения в список.

После отправки формы он должен принять новое значение и вставить его в таблицу местоположений, и, конечно, обновить LocationID объектазапись добавляется к идентификатору вновь вставленного местоположения.

Прочитайте приведенные ниже фрагменты кода

Я читал, что ComboBox позволяет вводить значения, которыеотсутствуют в списке, и использовали демонстрационную версию ( Здесь )

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

Мне нужен способ попробовать иподавить эту проверку, только для поля LocationID, но по-прежнему защищать от нулевых значений.

BEGIN EDITS

РЕДАКТИРОВАТЬ: Я нашел этот пост , нокак там написано в OP, хак javascript не очень расширяемый, поэтому я очень хочу его избежать.

EDIT:

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

Я обнаружил, что при этом хаке он не работает в Firefox или Chrome, если я помещаю блок кода в событие готового документаиспользуя Telerik (). ScriptRegistrar (). OnDocumentReady (), правильно window.mvcClientValidationmetadata каким-то образом очищается при достижении этого события, даже если метаданные правильно вставлены изначально.

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

END EDITS

Кроме того, сейчас яПривязываю к моей модели напрямую, вот так:

        public JsonResult Create(MyEntity Model)

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

Итак, я думаю, что идея состоит в том, чтобы использовать FormCollection в сигнатуре метода, обнаружить нецелое LocationID, вставить обновление, а затем запустить UpdateModel ()?Конечно, добро пожаловать в лучшие предложения.

Спасибо!

Фрагменты кода

Модель:

class IntegerValueList
{
    public Int16 ID { get; set; }
    public string Name { get; set; }
}

        var lists = new Dictionary<string, IEnumerable<object>>();

        lists["Locations"] = (from record in db.Locations
                              orderby record.Name
                              select new IntegerValueList
                              {
                                  ID = record.LocationID,
                                  Name = record.Name
                              }).ToList();

Контроллер:

        LocationList = new SelectList(lists["Locations"], "ID", "Name", LocationID);

Вид:

                <td>
                    <div class="editor-field">
                        <%: Html.Telerik().ComboBoxFor(model => model.LocationID)
                                .BindTo(Model.LocationList)
                                .Filterable(c => c.FilterMode(AutoCompleteFilterMode.Contains)) 
                        %>

                        <%: Html.ValidationMessageFor(model => model.LocationID, "*") %>
                    </div>
                </td>

1 Ответ

0 голосов
/ 26 апреля 2012

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

Вы можете даже поместить ссылку «Выбрать» рядом с текстовым полем и скрыть раскрывающийся список до тех пор, пока не будет нажата ссылка.Недостатком является то, что мы могли бы в итоге включить Сан-Диего, Сан-Диего и Сандиго в список местоположений ... но тогда требование вашего клиента не позволяет нам явно предотвратить это.

...