2012-03-21 3 views
1

Проверка и проверка на стороне клиентаSummary отлично работает для моего проекта (MVC4 + Razor + Unobtrusive JS), но ошибки на стороне сервера не отображаются на моем представлении, и если была какая-либо ошибка на стороне клиента, он не удаляется из представления (он из ModelState). Я пробовал как Chrome14, так и IE9ValidationSummary для ошибок на стороне сервера не работает

Ошибки на стороне сервера добавляются к модели как ModelState.AddModelError(string.Empty, ModelState.AllErrors()); и показаны в виде @Html.ValidationSummary(false).

Редактировать

Простой формы представить работают нормально, это показывает несколько сообщений об ошибках возвращаемых из сообщений об ошибках сервера и обновлений, но, Ajax форма на основе представить не работает сообщения об ошибках, возвращаемых АЯКСЕ основе подчиненной формой являются не показан вообще.

Вот пример демонстрации того, как запрос делается

@*... View contents related to Master Model ...*@ 
    @using (Ajax.BeginForm("ActionToAddRecord", new AjaxOptions())) 
    { 
     @Html.Action("ActionToAddRecord") 
     <input type="submit" value="Add Record"/> 
    } 
    @*... View contents related to Master Model ...*@ 

ActionToAddRecord представляет собой частичный вид, представляющий модель, содержащуюся на мастер-модели

Ошибки возвращаются как

[HttpGet] 
public ActionResult ActionToAddRecord() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult ActionToAddRecord(childModel model) 
{ 
    ModelState.AddModelError(string.Empty, "First error message"); 
    ModelState.AddModelError(string.Empty, "Second error message"); 
    return View(model); 
} 

Редакция

Я видел аналогичную функциональность в шаблонизированном MVC-приложении VS2010, в форме диалога, основанной на форме журнала. Сообщения об ошибках возвращаются как Json, а затем JS используется для их отображения. IMO похоже на то, что MS сделал запросы на основе Ajax довольно легкими и лаконичными (Ajax.BeginForm), но при этом отсутствует часть обработки ошибок. Сейчас я не хочу использовать JS для этого, может быть, лучший способ получить этот тип обработки ошибок обработан автоматически.

ответ

0

Решенный, с небольшой погрешностью.

Master View

@*Master View Contents*@ 
     @using (Ajax.BeginForm("AddPaymentCurrency", new AjaxOptions { UpdateTargetId = "paymentCurrency" })) 
     { 
      <div id="paymentCurrency"> 
       @{Html.RenderPartial("PaymentCurrency", Model.PaymentCurrencyNew);} 
      </div> 
     } 

PaymentCurrency Посмотреть

@*Model Editors*@ 
@Html.ValidationSummary(false) 
<input type="submit" value="Add Payment Currency"/> 

<div id="paymentCurrencyList" style="width:inherit; height:auto; overflow:auto;"> 
    @Html.Action("PaymentCurrencyList") 
</div> 

Контроллер

[HttpPost] 
public ActionResult AddPaymentCurrency(PaymentCurrency model) 
{ 
    if (!ModelState.IsValid) 
    { 
     ModelState.AddModelError(string.Empty, ModelState.AllErrors()); 
     return View("PaymentCurrency", model); 
    } 
    //Add login 
    return View("PaymentCurrency", model); 
} 

public ActionResult PaymentCurrencyList() 
{ 
    //var list = getList 
    return View(list); 
} 

маленькая ошибка

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

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