簡體   English   中英

使用ajax后,返回同一控制器的另一個MVC3視圖

[英]return another MVC3 view of the same controller after ajax is used

如何返回同一控制器的另一個視圖? 我為應用程序進行了一些調試:ajax方法調用控制器動作,傳遞參數,執行指令。

return View("GetEmployeeDays", model);,

GetEmployeeDays ”視圖從模型接收值並進行填充,但是最終在瀏覽器中我收到了初始視圖(來自我發出的請求)-而不是GetEmployeeDays視圖

來自Global.asax的路由代碼:

public static void RegisterRoutes(RouteCollection routes)
 {
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  routes.MapRoute(
      "Default", // Route name
      "{controller}/{action}/{id}", // URL with parameters
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );          
  }

調用動作控制器並傳遞參數的JQuery代碼:

<script type="text/javascript">
  $(document).ready(function () {
  $('li').click(function () {
  $.ajax({
    url: '@Url.Action("GetEmployeeDays", "ApproveWork")',
    type: 'GET',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    data: { userCode: $(this).attr('id') }
   })
  });
});

應該呈現GetEmployeeDays視圖的控制器操作:

   [HttpGet]
   public ActionResult GetEmployeeDays(string userCode)
   {
      .....
    return View("GetEmployeeDays", model);
   }

您無法通過ajax請求進行重定向。 嘗試一個簡單的GET請求:

<script type="text/javascript">
$('li').on('click', function()
{
   document.location.href = '@Url.Action("GetEmployeeDays", "ApproveWork")' + '?param1=val1&param2=val2';
});
</script>

控制器現在很好。

編輯:按要求更新

我不知道您要重新渲染的原始視圖是什么,我想您的問題很可能是您應該以PartialView的形式返回此視圖,因為您正在發出Ajax請求。 另外,看起來您實際上並沒有在任何地方渲染結果。 您對提琴手的反應是什么? 它顯示返回的HTML嗎? 如果是這樣,您可能只需要利用$ .ajax中的.done回調將其轉儲到頁面上。

<script type="text/javascript">
$(document).ready(function () {
$('li').click(function () {
$.ajax({
    url: '@Url.Action("GetEmployeeDays", "ApproveWork")',
    type: 'GET',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    data: { userCode: $(this).attr('id') }
    }).done(function() {
       $(this).addClass("done");
  });
});
</script>

如果只想將某些內容加載到頁面的一部分中而不重新加載到新頁面,則應在ajax函數的回調中更新頁面的特定部分。

$(function(){
 $('li').click(function () {
     var uCode=$(this).attr("id");
     $.get("@Url.Action("GetEmployeeDays","ApproveWork")?userCode="+uCode,
                                                          function(response){
       $("#DivToBeUpdated").html(response);
     });
 });
});

如果要重定向到新視圖,則應通過更新location.href屬性值來實現。

$(function(){
 $('li').click(function () {
     var uCode=$(this).attr("id");
     var url="@Url.Action("GetEmployeeDays","ApproveWork")?userCode="+uCode;
     window.location.href=url;         
     });
 });
});

從@David Diez構建,您可以將參數附加到您的請求中,如下所示:

<script type="text/javascript">
$('li').on('click', function()
{
   document.location.href = '@Url.Action("GetEmployeeDays", "ApproveWork", new { caseSensativeParamName = "foo" })';
});
</script>

當然,您也可以采用JavaScript路線。 這樣的事情應該起作用:

<script type="text/javascript">
$('li').on('click', function()
{
   var targetUrl = '@Url.Action("GetEmployeeDays", "ApproveWork")';
   var yourParam = $("#input-id").val();
   targetUrl = targetUrl + '?yourServerParamName=' + yourParam;
   document.location.href = targetUrl;
});
</script>

干杯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM