7

でビュー内の部分的なビューに戻ります。私のasp.net MVC 4プロジェクトでは、ユーザーが「詳細」をクリックしたときに、 。 データを保存するには問題ありませんが、部分的なビューを閉じることは問題ありません。部分的なビューを開くことは問題ではなく、モデルが有効でないときです(ユーザーが何かをマークするのを忘れたとき) 結果は、返されましたが、ビュー内ではありません。単なるスタンドアロンのページと見なされます。モデルが有効でない場合、エラーメッセージ

ビュー:

@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> 
} 

コントローラー:

[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); 
    } 

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

01部分図を呼び出すリンク私はあなたがいずれかのリダイレクトを実行したり、検証が失敗した場合は部分ビューを返しChangeEvaluatorコントローラのアクションに標準Html.BeginForm投稿を使用している見ることができるものからIndex page + partial view ​​

答えて

11

あなたが観察している動作は完全に正常です。あなたはそれを達成したい場合は、AJAXを使用して、このフォームを送信する必要があります:

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

をし、成功した場合には、それがリダイレクトされないように、あなたはあなたのコントローラのアクションを適応させることができますが、それは含むJSONオブジェクトを返します。

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

し、最終的にhandleSuccess JavaScript関数記述:このメソッドを使用してイム、validator.unobtrusive.parse()が部分的vieから取り外してしまった場合は

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

をにリダイレクトするためのURL w。ドロップダウンコントロールの選択に影響します。 validator.unobtrusive.parse()をロードしても、この問題は解決できません。これのための任意のアイデア。 – vinodh

+0

Microsoft.jQuery.Unobtrusive.Ajaxパッケージを持っていない場合、これはうまくいかないことに注意する価値があります($# 'someDivThatCOntainsYourForm')。あなたのプロジェクトにインストールされます。そのパッケージがインストールされたら - 完璧! – PTD

関連する問題