2015-12-24 21 views
2

當某些驗證錯誤是客戶端,而其他驗證錯誤是服務器端時,客戶端錯誤進入主視圖中的@Html.ValidationSummary佔位符,而服務器端錯誤進入@Html.ValidationSummary它位於動作部分視圖上。Html.ValidationSummary和Ajax.BeginForm最佳實踐

如果我沒有指定@Html.ValidationSummary作爲表單操作部分視圖的一部分,則根本不顯示服務器端錯誤。

如何將所有錯誤(客戶端和服務器端)合併到位於UpdateTargetId元素之外的一個div中?

@using (Ajax.BeginForm("PartialViewAction", "MyController", new AjaxOptions { UpdateTargetId = "AjaxResult"})) 
{ 
     <div class="ValidationSummary"> 
      @Html.ValidationSummary() 
     </div> 

      <div class="ChartCriteriaSideBox">  
       <div> 
        <ul class="none"> 
         <li> 
          @Html.RadioButtonFor(m => m.datesRange.PeriodTypeId, (int)DatesRange.PeriodType.RecentMonth, new { @checked = "checked" }) Recent Month 
         </li> 
         <li> 
          @Html.RadioButtonFor(m => m.datesRange.PeriodTypeId, (int)DatesRange.PeriodType.RecentYear) Recent Year 
         </li> 
         <li> 
          @Html.RadioButtonFor(m => m.datesRange.PeriodTypeId, (int)DatesRange.PeriodType.BetweenDates) Range 
         </li> 
        </ul> 
       </div> 
    </div> 
     <input type="submit" /> 
    } 
+0

http://stackoverflow.com/questions/9210197/does-html-validationsummary-work-for-client-side-validation-in-mvc3-or-mvc4 –

+0

您是否指定了兩個不同的ValidationSummary?如果是,那麼他們都是同一種形式? –

+0

可能會幫助您 http://csharp-video-tutorials.blogspot.com/2013/08/part-86-validationsummary-in-aspnet-mvc.html –

回答

0

@Orif Khodjaev的回答是非常有益的,但有一點變化:

,而不是使用DOMSubtreeModified事件我現在使用AjaxForm OnComplete事件。 DOMSubtreeModified事件已棄用。

4

這是達到預期結果的方法之一。 在你的主視圖,你應該有一個結構是這樣的:

<div id="MainValidationSummary"> 
    @Html.ValidationSummary() 
    <div id="PartialValidationSummary"></div> 
</div> 

你可以,如果你想AjaxResult驗證摘要無形的,但不要刪除它!從服務器的數據必須有更新:

#ajaxresult{ 
    display: none; 
} 

而這個事件監聽器添加到您的視圖:

$('#ajaxresult').bind('DOMSubtreeModified', function() { 
    $('#PartialValidationSummary').html($('#ajaxresult').html()); 
); 

我已經更新,以便將事件實際發射的代碼。不幸的是,它會在IE8 +和將輸出警告只工作到控制檯建議使用新的API,只有擁有IE11工作+

+0

您確定事件更改應該在div元素中起作用?我試過但事件沒有解僱......你能建議嗎? – Omtechguy

+0

@Omtechguy對不起,我誤解了這個事件,我已經更新了答案 –