2016-09-16 115 views
1

我有按鈕。我想在點擊按鈕時路由新視圖。此按鈕類似於如下:呼叫控制器方法返回視圖與Ajax呼叫從Asp.net查看頁面

<button type="button" id="btnSearch" class="btn btn-warning" style="height:35px;width:120px"> <i class="fa fa-search" aria-hidden="true"></i> <translate>Search</translate> </button> 

當按鈕被點擊並比低於運行的方法:

$('#btnSearch').click(function() { 
     return $.ajax({ 
      url: '@Url.Action("test", "ControllerName")', 
      data: { Name: $('#Name').val() }, 
      type: 'POST', 
      dataType: 'html' 
     }); 
    }); 

我控制器操作如下:

public ActionResult test(string CityName) { 
      ViewBag.CityName = CityName; 
      return View(); 
          } 

當調試我程序,流程來到我的控制器操作。但是索引網頁不會路由到測試視圖頁面。沒有發生錯誤。我能爲這個狀態做些什麼?

+1

AJAX的全部目的是留在同一頁上。如果你想在POST方法中重定向,那麼不要使用ajax。或者,如果你要添加你在'test()'方法中返回的視圖,則處理'success'回調並更新DOM(儘管在這種情況下「ViewBag.CityName = CityName;」是毫無意義的)。 '成功:function(response){$(someElement).html(response); }' –

回答

2

如果你想刷新頁面:

控制器:

public ActionResult Index() 
{    
    return View(); 
} 

public ViewResult Test() 
{ 
    ViewBag.Name = Request["txtName"]; 
    return View(); 
} 

Index.cshtml:

@using (Html.BeginForm("Test", "Home", FormMethod.Post)) 
{ 
    <input type="submit" id="btnSearch" class="btn btn-warning" style="height:35px;width:120px" value="Search"/> 
    <label>Name:</label><input type="text" id="txtName" name="txtName" /> 
} 

Test.cshtml:

@ViewBag.Name 

=========================================== ==

如果你不想要刷新頁面:

控制器:

public ActionResult Index() 
{    
    return View(); 
} 

[HttpPost] 
public PartialViewResult TestAjax(string Name) 
{ 
    ViewBag.Name = Name; 
    return PartialView(); 
} 

Index.cshtml:

<input type="button" id="btnSearch" class="btn btn-warning" style="height:35px;width:120px" value="Search"/> 
<label>Name:</label><input type="text" id="txtName" name="txtName" /> 


<script> 
$('#btnSearch').click(function() { 
    $.ajax({ 
     url: '@Url.Action("TestAjax", "Home")', 
     data: { Name: $("#txtName").val() }, 
     type: 'POST', 
     success: function (data) { 
      $("#divContent").html(data); 
     } 
    }); 
}); 
</script> 

TestAjax.cshtml:

@ViewBag.Name