【问题标题】:Using Razor Pages coredotnet how can I load a partial view via ajax使用 Razor Pages coredotnet 如何通过 ajax 加载部分视图
【发布时间】:2018-12-19 14:10:33
【问题描述】:

在使用 Razor 页面时,使用 @Html.Partial(..) 来使用部分很简单。 但是,当下拉列表更改时,我想刷新部分视图 - 部分视图呈现的部分。

我搜索了很多,并找到了诸如 https://github.com/aspnet/Razor/issues/2073 之类的答案,他们说部分代码是为了隐藏代码。

是否有合理的解决方法,以便我可以重新渲染在局部视图中定义的视图子集?实现这一目标的最佳做法是什么?

【问题讨论】:

  • 你在使用一些库吗?比如jquery或angular?可以设置诸如标签助手之类的东西。我以前用角度做过这个
  • 不,在dotnet core v2.1学习纯razor页面
  • 好吧 ajax 是一个 js 概念(客户端 + 服务器),它不再是纯粹的 razor(服务器端)我一直在寻找通过 js 内置在 razor 中的东西,但从未找到任何东西。所以如果你需要重新渲染,你将不得不以某种形式使用js。
  • 您需要在哪些事件上重新渲染视图?你有什么用例吗?
  • 我认为这个场景很简单。我有一个下拉列表,其中包含部门列表。当下拉列表更改时,我想加载一组与新部门相关的新模块。我可以重新加载整个页面并使用与第一次渲染时相同的逻辑,但只是替换有问题的部分似乎更好

标签: ajax partial-views razor-pages


【解决方案1】:

是的,

有一个可以调用的操作方法来重新加载部分视图:

public ActionResult Reload()
{
    return PartialView("NameOfPartialView");
}

从客户端获取(我将使用 jQuery):

$.ajax({ 
  type: "post", 
  url: "Reload",
  data: {},
  success: function(d) {
   //d is the HTML content returned from the Action Method
   $("#parentelementaroundinnerdata").html(d);
  }
});

从 action 方法返回部分视图会返回一个 HTML 字符串,并且可以使用父元素将其注入页面以用更新替换其内容。这意味着在渲染原件时,设置如下:

<div id="parentelementaroundinnerdata">
   @Html.Partial("NameOfPartialView")
</div>

您可以使用来自 AJAX 请求的相同部分并加载初始结果 - 有时您必须小心在部分中正在发生的事情,因为...

【讨论】:

  • 这适用于 Razor 页面吗?这看起来像标准 MVC,还是必须在两者之间混为一谈?
  • 这种方式要求您的局部视图可以通过 URL 访问。这里显示的控制器只是确保有一个 URL。您还可以制作一个布局设置为 null 的剃刀视图,它可以充当您的局部视图
  • 好吧,AJAX 请求访问一个操作方法,而 Html.Partial 不担心从操作方法加载任何内容。它暴露的唯一原因是因为它将重新加载部分视图,而不是从原始视图执行中执行。我更新了上面的示例。至于布局,我从不将布局属性指定为 null,也不会弹出带有部分声明的布局页面。这很棒,因为理论上您可以在视图模式和部分视图模式下定义相同的视图,但这确实变得很棘手。
  • 所以我仍然不确定 MVC 与 Razor Pages 元素在这一切中的关系。在 Razor 页面中,它将是 public IActionResult OnGetReload() 并且 PartialView 不能用作返回类型。所以大概需要在某处引用另一个 MVC dll。所以没有真正找到问题的症结 - Razor Pages
  • 啊抱歉,没有意识到这种区别,但这个解决方案(在底部)是否有效:github.com/aspnet/Mvc/issues/6759
猜你喜欢
  • 2021-01-28
  • 2013-01-10
  • 2020-06-26
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 2018-07-26
  • 1970-01-01
相关资源
最近更新 更多