Мой AddressEditViewModel имеет несколько атрибутов, помеченных [Required(ErrorMessage="My Error Message Here")]
и / или [DisplayName("etc")]
.Атрибуты DisplayName работают:
<%: Html.LabelFor(model => model.Field) %>
, и я думаю, что обязательные атрибуты тоже работают, но я не знаю, как предоставить отзыв о форме (диалоговое окно jQuery UI).Эта форма отправляется через $ .ajax () и в методе действия:
[HttpPost]
public ActionResult Edit(AddressEditViewModel address)
{
var addressToEdit = dc.Addresses.FirstOrDefault(x => x.AddressID == address.AddressIDEdit);
if (ModelState.IsValid)
{
//make sure there is at least one active address
if (!address.ActiveEdit && (addressToEdit != null && addressToEdit.Active))
{
if (dc.Addresses.Where(x => x.ProfileID == addressToEdit.ProfileID).Count(x => x.Active) == 1)
{
address.ActiveEdit = true;
}
}
try
{
//TryUpdateModel SUCKS!~
//use valueinjecter
addressToEdit.InjectFrom<VMToAddress>(address);
dc.SubmitChanges();
}
catch (Exception)
{
return View(address);
}
}
else
{
return View(address); //activate the red borders around textboxes
}
return Content("Ok");
}
И небольшой класс для ValueInjecter:
public class VMToAddress : LoopValueInjection
{
protected override string TargetPropName(string sourcePropName)
{
if (sourcePropName.EndsWith("Edit"))
{
return sourcePropName.RemoveSuffix("Edit");
}
else if (sourcePropName.EndsWith("Create"))
{
return sourcePropName.RemoveSuffix("Create");
}
else
{
return sourcePropName;
}
}
}
ModelState.IsValid возвращает true, даже если address.RequiredField
равно нулю.SubmitChanges()
создает исключение SqlException, поскольку оно не может вставить значение NULL.Я не понимаю, как использовать ModelState, или есть какой-то другой способ предоставить отзыв о недействительном поле?Я хотел бы установить красную рамку вокруг моих текстовых полей, например, проверку модели, которую я видел во многих руководствах MVC, или, возможно, отобразить значение ErrorMessage из ViewModel.
Другое редактирование
Удален jQuery.validate и создан механизм связывания модели клиента для размещения обычно именованных элементов.Пользовательский механизм связывания моделей теперь даже добавляет сообщения проверки (поэтому я удалил вызовы Html.ValidationMessageFor(...)
, поскольку они мне не нужны - только границы).
Однако, по предложению Omu использовать плагин jQuery.form, моя модель теряется после первой обратной передачи.closeEditForm
просто проверяет возврат Content("Ok")
, закрывает диалоговое окно «Правка» и, наконец, обновляет диалоговое окно «Список».Но, после ошибки, он корректно не закрывает диалоговое окно, дает мне красные границы (ура), но на последующих постах нет модели (boo), переданной в мое связующее - только нулевые значения.
$('#editform').submit(function () {
$(this).ajaxSubmit({
target: '#editform', //this will allow validation classes to be added, etc
success: closeEditForm //this will close the edit form if the response text is "Ok"
});
return false;
});
Я отправляю форму так:
$("#dialog-address-edit").dialog({
...lots of dialog settings
buttons: {
'Save': function () {
$('#editform').submit();