2017-03-16 165 views
0

我在asp.net MVC編程新的,請溫柔... :)重定向到局部視圖,另一個控制器

請注意以下幾點看法都是局部視圖!通過Ajax調用方法並通過列表重定向到部分視圖,通過Ajax發佈表單,等等。好吧,我們繼續...

第一個控制器名爲AlertsController。其中一種方法是ResolveAlert(Guid id),它返回RedirectToAction - > UnresolvedAlerts(),它只是一個未解決的警報列表。

第2個控制器名爲FrontDeskController。其中一種方法是CustomerDetails(Guid id),它列出了他可能擁有的客戶和警報。

我希望能夠「解決警報」(因此使用第一個控制器的方法),但返回到我之前的頁面,而不是轉到該方法返回的重定向頁面。

我向ResolveAlert()方法添加了第二個參數,該方法列出了一個returnUrl字符串。我設法送我希望它重定向到URL,但我得到的只是部分(整個頁面內不會呈現,因爲它應該)...

這裏是我的AlertsController我ResolveAlert方法:

// 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"); 
    } 

...這是我爲CustomerDetails()方法對我FrontDeskController:

// 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()方法被調用分兩步...第一我稱之爲模式從爲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,但問題在於它屬於不同的控制器...

是否有可能以某種方式得到這個工作,或者我應該咬緊牙關,忘記將這些頁面作爲partial,擺脫Ajax調用並使用普通的Url.Action()鏈接?

回答

0

這只是一個在我的代碼的JavaScript/AJAX錯誤....請忽略的問題...

對於那些想知道,我一直在使用相同的ID 2種形式。 JS靜靜地死去,允許表單正常發佈,而不是通過Ajax發佈。現在讓我撓了一下頭腦。太糟糕了,網絡開發工具和VS尤其不能狙擊這樣的錯誤,並提供有意義的提示來幫助您調試...

相關問題