5 asp.net-mvc asp.net-core-mvc asp.net-core
在 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"
})
Run Code Online (Sandbox Code Playgroud)
控制:
public async Task<ActionResult> GetEnvironment(int? id)
{
var environments = await _context.Environments.SingleOrDefaultAsync(m => m.Id == id);
return PartialView("_Environment",environments);
}
Run Code Online (Sandbox Code Playgroud)
部分观点:
@model PowerPhysics.Models.Environments
this is a partial view
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用 ViewComponents。当页面加载组件时,组件正常工作,但我不明白之后如何仅刷新组件(例如使用按钮):
看法:
@Component.InvokeAsync("Environments", new { id = Model.Id }).Result
Run Code Online (Sandbox Code Playgroud)
成分:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用 MVC6 中的 PartialViews 仅更新视图的一部分?
小智 7
您可以按如下方式使用标签:
<a data-ajax="true"
data-ajax-loading="#loading"
data-ajax-mode="replace"
data-ajax-update="#editBid"
href='@Url.Action("_EditBid", "Bids", new { bidId = Model.BidId, bidType = Model.BidTypeName })'
class="TopIcons">Link
</a>
Run Code Online (Sandbox Code Playgroud)
确保 _Layout.cshtml 页面的 body 标记末尾有以下脚本标记:
<script src="~/lib/jquery/jquery.unobtrusive-ajax/jquery.unobtrusive-ajax.js"></script>
Run Code Online (Sandbox Code Playgroud)
ViewComponent 并不能替代 ajax 链接。它的工作原理更像是Html.Action调用将子操作包含到页面中(例如:加载菜单栏)。这将在 razor 执行视图页面时执行。
截至撰写本文时,aspnet core 中还没有对 ajax 操作链接替代方案的官方支持。
但好处是,我们可以用很少的 jQuery/javascript 代码来完成 ajaxified 的事情。您可以使用现有的 Anchor 标签助手来完成此操作
<a asp-action="GetEnvironment" asp-route-id="@Model.Id" asp-controller="Environments"
data-target="environment-container" id="aUpdate">Update</a>
<div id="environment-container"></div>
Run Code Online (Sandbox Code Playgroud)
在 javascript 代码中,只需监听链接点击并进行调用并更新 DOM。
$(function(){
$("#aUpdate").click(function(e){
e.preventDefault();
var _this=$(this);
$.get(_this.attr("href"),function(res){
$('#'+_this.data("target")).html(res);
});
});
});
Run Code Online (Sandbox Code Playgroud)
由于您在查询字符串中传递参数,因此load也可以使用 jQuery 方法。
$(function(){
$("#aUpdate").click(function(e){
e.preventDefault();
$('#' + $(this).data("target")).load($(this).attr("href"));
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8639 次 |
| 最近记录: |