2017-03-20 64 views
0

我使用ajax加載部分視圖的內容,並通過填充div的html直接將返回的HTML輸出到頁面。這裏的阿賈克斯:使用局部視圖加載表單,顯示響應

$.ajax({ 
        data: { productId: productId }, 
        datatype: "text/plain", 
        type: "GET", 
        url: theUrl, 
        cache: false, 
        success: function (data) { 
         $("#contentArea").html(data); 
        } 
       }); 

這一切都按預期工作。取決於許多因素,部分視圖中的實際html會有所不同,並且其中一種可能的方案會返回一個表單,要求提供一些反饋。

我有這方面的客戶端驗證工作,但服務器端驗證不合作。

我的驗證是FluentValidation,在我的控制器我有這幾行(myValidator是我FluentValidation驗證和工作正常):

var valResult = myValidator.Validate(myRequest); 
if (!valResult.IsValid) return Redirect(Request.UrlReferrer); 

這一半的作品,和isValid檢查每當數據是無效的失敗但後來我的重定向只是重新加載頁面,而沒有服務器端驗證消息。大概這是因爲我使用重定向。

如何獲取它重新加載頁面,但驗證消息就位,因爲我使用Ajax動態加載此表單?

回答

0

您需要將驗證錯誤寫回您的ViewModel並將其發回給視圖本身。我做這樣的:

var mailValidator = new Models.Dokumentacija.Validation.DokumentacijaMailValidation(); 
var mailValidatorResult = mailValidator.Validate(vm.MailPodatki); 
if (!mailValidatorResult.IsValid) 
{ 
    ModelState.Clear(); 
    foreach (var error in mailValidatorResult.Errors) ModelState.AddModelError(string.Format("MailPodatki.{0}", error.PropertyName), error.ErrorMessage); 
    return View(vm); 
} 

您應該然後(與錯誤消息現在)回到您的視圖模型,所以我認爲你的重定向將不起作用。你能做一個return PartialView("_myPartial", vm);嗎?

+0

我能夠處理驗證錯誤並改變我如何顯示它們,所以我將其標記爲答案。謝謝。 –