【发布时间】:2016-08-28 16:48:53
【问题描述】:
在 MVC5 中,@Ajax.ActionLink 可用于仅更新部分视图而不是重新加载整个视图。显然在 MVC6 中不再支持。
我尝试过使用@Html.ActionLink,如下所示,但它不会更新表单,它只返回部分视图:
查看:
@Html.ActionLink("Update", "GetEnvironment", "Environments", new { id = Model.Id }, new
{
data_ajax = "true",
data_ajax_method = "GET",
data_ajax_mode = "replace",
data_ajax_update = "environment-container",
@class = "btn btn-danger"
})
控制:
public async Task<ActionResult> GetEnvironment(int? id)
{
var environments = await _context.Environments.SingleOrDefaultAsync(m => m.Id == id);
return PartialView("_Environment",environments);
}
局部视图:
@model PowerPhysics.Models.Environments
this is a partial view
然后我尝试使用 ViewComponents。当页面加载组件正常工作但我不明白之后如何刷新组件(例如使用按钮):
查看:
@Component.InvokeAsync("Environments", new { id = Model.Id }).Result
组件:
public class EnvironmentsViewComponent : ViewComponent
{
public EnvironmentsViewComponent(PowerPhysics_DataContext context)
{
_context = context;
}
public async Task<IViewComponentResult> InvokeAsync(int? id)
{
var environments = await _context.Environments.SingleOrDefaultAsync(m => m.Id == id);
return View(environments);
}
}
如何在 MVC6 中使用 PartialViews 只更新视图的一部分?
【问题讨论】:
-
从 javascript 对返回局部视图的操作进行 ajax 调用。在ajax调用的成功回调中,从结果中获取html并更新你的容器。
-
是的,我可以使用 Javascript,但我想知道 MVC6 和 HMTL5 是否有更好的方法。也许我在代码中做错了什么。最重要的是,我想了解什么是最佳做法。
标签: asp.net-mvc asp.net-core asp.net-core-mvc