7

Asp.net MVC 4 projemde, bir kullanıcının "daha fazla ayrıntı" için tıkladığı kısmi bir görünümden emin olmak istiyorum. . Verilerin kaydedilmesi sorun değil, kısmi görünümü kapatmak sorun değil, kısmi görünümü açmak sorun değil, modelim geçerli değilken (bir kullanıcı bir şeyi işaretlemeyi unuttuğunda) Sonuç olarak benim kısmi görünümüm döndü, ama olması gereken yerde değil. Sadece bağımsız bir sayfa olarak görülüyor.Model geçerli olmadığında, görünümün içinde kısmi görünümüne dönün, hata iletisiyle birlikte

Görünüm:

@model Evaluatietool.ViewModels.EvaluatorWijzigenOPViewModel 
<h3>@ViewBag.Message</h3> 
@using (Html.BeginForm("ChangeEvaluator", "Ontwikkelplan")) 
{ 
    @Html.ValidationSummary(true) 
    @Html.HiddenFor(model => model.oldEvalAccount) 
    @Html.HiddenFor(model => model.selectedMedewerkerAccount) 
    @Html.HiddenFor(model => model.eval); 
    @Html.HiddenFor(model => model.countMedewerkers); 
... 

... 
<div class="Buttons"> 
    <input type="submit" value="Submit" /> 
    @Ajax.ActionLink("Sluiten", "Evaluatorenlijst", new AjaxOptions { OnSuccess = "HideResultDiv" }) 
</div> 
} 

Denetleyici:

[HttpPost] 
    public ActionResult ChangeEvaluator(EvaluatorWijzigenOPViewModel ewopvm) 
    { 
     if (ModelState.IsValid) 
     { 
      if (ewopvm.selectedObjects != null) 
      { 
       ewopvm.selectedObjects.Add(ewopvm.selectedMedewerkerAccount); 
      } 
      else 
      { 
       ewopvm.selectedObjects = new List<string>(); 
       ewopvm.selectedObjects.Add(ewopvm.selectedMedewerkerAccount); 
      } 
      Ontwikkelplannen op = new Ontwikkelplannen(); 
      Evaluaties e = new Evaluaties(); 
      foreach (string s in ewopvm.selectedObjects) 
      { 
       op.ChangeEvaluator(ewopvm.newEvalAccount, ewopvm.oldEvalAccount, s, ewopvm.eval); 
      } 
      return RedirectToAction("Evaluatorenlijst"); 
     } 
     return PartialView("EvaluatorWijzigenPartial", ewopvm); 
    } 

kısmi görünümü çağıran bağlantı

@Ajax.ActionLink(item.Evaluator1.Naam, "EvaluatorWijzigenPartial", new { id = item.ID,  eval = true }, new AjaxOptions { UpdateTargetId = "EvaluatorWijzigen", OnComplete = "ShowResultDiv"}) 

01 I ya bir yönlendirme gerçekleştirmekte ya da doğrulama başarısız olursa kısmi bir görünüm verir ChangeEvaluator kontrol eylemi için standart Html.BeginForm ilanı kullanan görebilir kadarıylaIndex page + partial view Partial view returned when model.isvalid != true

cevap

11

.

Gözlemlediğiniz davranış tamamen normaldir. Bunu başarmak istiyorsanız AJAX kullanarak bu formu göndermek zorunda kalacak:

@using (Ajax.BeginForm("ChangeEvaluator", "Ontwikkelplan", new AjaxOptions { OnSuccess = "handleSuccess" })) 
{ 
    ... 
} 

ve başarı durumunda bunun yönlendirmek kalmaması o zaman kontrolör eylemi adapte olabilir ama içeren bir Json nesnesi döndüren uRL yönlendirmek için:

[HttpPost] 
public ActionResult ChangeEvaluator(EvaluatorWijzigenOPViewModel ewopvm) 
{ 
    if (ModelState.IsValid) 
    { 
     ... 
     return Json(new { redirectTo = Url.Action("Evaluatorenlijst") }); 
    } 
    return PartialView("EvaluatorWijzigenPartial", ewopvm); 
} 

ve son olarak işlev javaScript handleSuccess geç: acı Bu yöntemi kullanarak ise

function handleSuccess(result) { 
    if (result.redirectTo) { 
     // The controller action returned a JSON object with the redirectTo property 
     // let's redirect to this location: 
     window.location.href = result.redirectTo; 
    } else { 
     // The controller action returned a partial view with the form and the errors 
     // So we need to update some containing DIV with it: 
     $('#someDivThatCOntainsYourForm').html(result); 
    } 
} 
+0

, validator.unobtrusive.parse() kısmi vie kaldırılır var w. Açılan kontrol seçimlerini etkiler. Ben validator.unobtrusive.parse() yüklerken bile, hala bu sorunu çözemiyorum. Bunun için bir fikrin var. $ ('# someDivThatCOntainsYourForm'). html (sonuç); (==> Bu denetimleri kaldırırsam düzgün çalışıyorsa) – vinodh

+0

Microsoft.jQuery.Unobtrusive.Ajax paketine sahip değilseniz, bunun işe yaramayacağını unutmayın. projenize yüklendi. Bu paket kurulduktan sonra - mükemmel! – PTD

İlgili konular