0

我有一個包含搜索欄的頁面,默認情況下它會顯示下面的項目列表。 每個項目都包裝在ajaxform中,以便用戶可以更新數量。 客戶端驗證在頁面加載時效果很好,並且需要數量。ASP.Net MVC - 部分刷新後客戶端驗證會中斷嗎?

只要用戶點擊搜索,並且部分結果被刷新,我的整個驗證就會中斷,並且不再顯示驗證摘要。

我試圖在刷新部分後通過調用$.validator.unobtrusive.parse($("#resultList")); 添加驗證,但它似乎沒有做任何事情。

任何解決方案?

的MainForm

<script> 
function onSearchSucceeded() { 
    $.validator.unobtrusive.parse($("#resultList")); 
} 

function onUpdateSucceeded() { 
    $.validator.unobtrusive.parse($("#resultList")); 
} 

$(function() { 

    $("#resultList :input[type=text]").blur(function() { 
     $(this).closest("form").submit(); 
    }); 

)}; 

</script> 


@using (Ajax.BeginForm("Search", 
    null, 
    new AjaxOptions 
    { 
     UpdateTargetId = "resultList", 
     LoadingElementId = "searchLoader", 
     OnSuccess = "onSearchSucceeded" 
    }, 
    new 
    { 
     id = "searchForm" 
    } 
    )) 
{ 
    @Html.TextBoxFor(m => m.query) 
    <input type="submit" value="search" /> 
} 


<div id="resultList"> 
    @Html.Partial("SearchResult", Model.Results) 
</div> 

部分

@foreach (var item in Model) { 
    using (Ajax.BeginForm("UpdateItem", 
     new AjaxOptions { 
      UpdateTargetId = "resultList", 
      OnSuccess = "onUpdateSucceeded" 
     }, 
     null, 
     new{ 
      id = "form-" + item.Id 
     } 
    )){ 
     @Html.TextBoxFor(m => item.Quantity) 
     @Html.ValidationSummary() 
     // This form gets submitted through javascript after a blur on quantity textfield 
    } 
} 

回答

2

onSearchSucceededonUpdateSucceeded功能似乎正確的給我。它在這些函數內部,告訴jQuery不顯眼的框架,新的DOM元素存在於結果div中並且需要註冊。

什麼困擾我是在你的代碼的評論:

$(document).on('blur', 'form[id^="form-"] input[name$="Quantity"]', function() { 
    $(this).closest('form').submit(); 
}); 
+0

感謝:

// This form gets submitted through javascript after a blur on quantity textfield 

不幸的是,你還沒有確切地顯示這是如何做到的,但下面的代碼工作對我很好對於答案,我更新了我的問題,並添加了提交表單的代碼,我認爲它沒有問題 – aryaxt 2013-03-18 15:03:28

+0

呃,實際上有一個問題。您沒有以* lively *方式訂閱.blur事件,這意味着在第一次AJAX調用之後,您的blur事件不再有效。看看我的例子。我已經使用'.on()'方法來訂閱它,這意味着即使元素還沒有存在或者在DOM中被更新,blur事件也會自動附加到它。 – 2013-03-18 17:00:08

+0

這就是問題,謝謝,請您將其添加到您的答案,以便我可以接受它?謝謝 – aryaxt 2013-03-18 17:56:36