У меня есть 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>