【问题标题】:Why doesn't my view get rendered when my action is entered from a Ajax call?从 Ajax 调用输入我的操作时,为什么不呈现我的视图?
【发布时间】:2015-08-18 06:15:15
【问题描述】:

我有一个 Ajax 调用,它击中了我的控制器操作“SearchFromWithin”,我想知道为什么视图没有显示。我可以进入视图并通过它,但屏幕保持不变。它不显示新视图。

这是我的代码

var optionsFromWithin = {
     url: '/Home/SearchFromWithin',
     type: "get",
     data: { searchQuery: navbarInput.value, classDate: today, latitude: latitude, longitude: longitude, mapType: mapType }
};
            
$.ajax(optionsFromWithin).done(function (data) {
     // don't do anything here  
});

这是控制器中的操作。当我到达 return 语句时,我可以进入“搜索”视图并逐步浏览它,而不会出现明显的错误,但该页面与我进行 Ajax 调用时所在的页面相比永远不会改变。

    [HttpGet]
    public ActionResult SearchFromWithin(string searchQuery, DateTime classDate, string latitude, string longitude,
        string mapType, int page = 1)
    {
            // do a bunch of stuff here
            return View("Search", viewModel);
    }

【问题讨论】:

  • 您好,尝试使用局部视图而不是视图,因此,将返回视图更改为返回 PartialView("Search", viewModel),还要记住,PartialView 必须只有里面的 html身体。
  • 请不要硬编码你的网址 - 使用url: '@Url.Action("SearchFromWithin", "Home")',

标签: jquery ajax asp.net-mvc asp.net-mvc-viewmodel


【解决方案1】:

这可能是因为您没有更新页面吗?通常当你调用ajax时,你不会调用部分视图,将其内容用作特定元素的html[例如DIV]?

return PartialView("viewName",Model);

然后当ajax调用完成时

$('#myDiv').html(data);

这就是你要找的吗?

【讨论】:

  • 我在不同的控制器中,所以我要替换的部分甚至不存在于页面上。这有关系吗?
  • 不同页面是什么意思?您希望页面如何更改?
【解决方案2】:

使用 ajax 调用您将无法浏览其他页面。我们实际上使用 Ajax 从服务器获取数据,然后用这些数据更新客户端 html。

  1. 在控制器中使用此代码

    return PartialView("viewName",Model);
    
  2. 然后像这样导航页面:

     $.ajax(optionsFromWithin).done(function (data) {
     /*pass the data to next page for re use or save somewhere*/
        window.location.href = "/Controller/Action"; 
      }); 
    

【讨论】:

    猜你喜欢
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多