2017-03-16 8 views
0

別のコントローラ上の一部のビューにリダイレクトし、:)私はasp.net MVCプログラミングに新しいです

は、次のビューには、すべての部分図であることに注意してください...優しくしてください!メソッドはAjaxを介して呼び出され、リスト付きの部分ビューにリダイレクトされ、フォームはAjaxなどを介してポストされます。

最初のコントローラはAlertsControllerです。メソッドの1つはResolveAlert(Guid id)で、未解決のアラートの一覧にすぎないRedirectToAction - > UnresolvedAlerts()を返します。

2番目のcontollerはFrontDeskControllerです。メソッドの1つは、CustomerDetails(Guid id)です。これは、顧客と顧客のアラートをリストします。

「アラートを解決する」(したがって、第1コントローラのメソッドを使用する)、メソッドが返すリダイレクトされたページに行くのではなく、前のページに戻ることができます。

returnUrl文字列をリストするResolveAlert()メソッドに2番目のパラメータを追加しました。

// Resolve Alert POST 
    [HttpPost] 
    public async Task<ActionResult> Resolve(AlertModel model, string redirectUrl) 
    { 
     await _AlertsService.ResolveAsync(model); 
     if (!string.IsNullOrWhiteSpace(redirectUrl)) 
      return Redirect(redirectUrl); 
     return RedirectToAction("Unresolved"); 
    } 

は、ここに私のAlertsControllerに私ResolveAlert方法だ...私はそれがにリダイレクトするURLを送信するために管理するが、私は(それが必要として、ページ全体の内部でレンダリングされていない)だけ部分を取得します

...とここに私のFrontDeskControllerの私CustomerDetailsである()メソッド:

// Display Customer Alerts 
     public async Task<PartialViewResult> CustomerDetails(AttendanceModel model, Guid id) 
     { 
      var customer = await _CustomersService.ReadAsync(id); 
      ViewData["Customer"] = await _CustomersService.ReadCustomerExtendedAsync(id); 

      var alerts = await _AlertsService.ReadCustomerAlertsAsync(id); 
      ViewData["Alerts"] = alerts.Where(x => x.IsResolved == false).ToList(); 

      return PartialView("_CustomerDetails", model); 
     } 

最初のコントローラのResolveAlert()メソッドを2つの段階で呼び出された...第一私はCustomerDetailsビューからモーダルを呼び出します:

function resolveAlert(alertId, customerId) { 

     var returnTo = '/FrontDesk/CustomerDetails/' + customerId; 

     $.ajax({ 
      method: 'GET', 
      url: '/Alerts/Resolve/' + alertId, 
      data: {returnUrl : returnTo}, 
      dataType: 'html' 
     }).then(function (html) { 
      $('#dialog-container').html(html); 
      showDialog(); 
     }); 
    } 
...その後、モーダルに私が持っている:

@{ 
    var data = Request.Params["returnUrl"]; 
} 

@using (Ajax.BeginForm("Resolve", "Alerts", new { redirectUrl = data}, new AjaxOptions() { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "partial", OnSuccess = "hideDialog" }, new { id = "form", @class = "form-horizontal" })) 
{ ..... textbox with some notes that I can post while resolving the alert ..... } 

...と(最終的に)ここに私のモーダルの一番下にある最後の部分である:私は思う

<script type="text/javascript"> 
    $('#form').validate({ 
     rules: { 
      AlertNotes: { 
       required: true 
      } 
     }, 
     submitHandler: function (form) { 

      $.ajax({ 
       url: $(form).attr("action"), 
       data: $(form).serialize(), 
       type: $(form).attr("method") 
      }).then(function (result) { 
       $("#partial").html(result); 
       hideDialog(); 
      }); 
     } 
    }); 
</script> 

は、返された部分がそのコンテナ内で正しくレンダリングされるためには、ResolveAlert()メソッドからRedirectToActionを返さなければならないが、問題はそれが別のコントローラに属しているということだ...

これをどうにかして取得することは可能ですか?または弾丸を噛むだけで、これらのページを部分的なものとして忘れて、Ajax呼び出しを取り除き、通常のUrl.Action()リンクを使用する必要がありますか?

答えて

0

それは...質問を無視してください....疑問に思ったものについては

私のコードでただのJavascript/Ajaxのバグだった、私は同じIDを使用して2つの形態を持っていました。 JSはサイレントモードで死亡し、Ajaxを介さずにフォームが正常に投稿されるようにしました。私はしばらく頭を傷つけていました。あまりにもWeb開発ツールやVSがそのようなエラーを狙うことはできず、デバッグに役立つ重要なヒントを提供できません。

関連する問題