ASP.NET 核心中 Html.RenderAction 的等价物
Equivalent of Html.RenderAction in ASP.NET Core
我正在尝试从我的小型 ASP.NET MVC 4 应用程序切换到 ASP.NET 核心。
在我的 MVC 4 应用程序中,我有一个使用 RenderSection 的布局文件:
@RenderSection("xyz", required: false)
然后,在我的索引文件中,我有:
@section xyz{
@{Html.RenderAction("abc");}
}
因此,我正在从 Index 调用控制器操作方法 abc()。方法 abc() 传递模型对象和 returns 带有该模型的部分视图。
我无法使用 RenderPartial,因为它需要传递模型。
现在,在 ASP.NET Core 中,我没有 RenderAction() 方法。
我的问题是:如何从我的索引文件调用控制器操作方法?是否还有其他 HTML 助手(虽然我没有看到)?
.
我终于可以用 ViewComponent 来完成了。所以,我没有使用 RenderAction(),而是:
@section xyz{
@await Component.InvokeAsync("abc")
}
其中 abc 是一个 class 作为 abcViewComponent。 ViewComponent 看起来像:
public class abcViewComponent : ViewComponent
{
private DbContextOptions<MyContext> db = new DbContextOptions<MyContext>();
public async Task<IViewComponentResult> InvokeAsync()
{
MyContext context = new MyContext(db);
IEnumerable<tableRowClass> mc = await context.tableRows.ToListAsync();
return View(mc);
}
}
然后,我在新文件夹 'abc' 下创建了一个视图 Views/Home/Components/abc/Default.cshtml
请注意,视图名称是 Default.cshtml,这就是它的工作原理。如果谁有更好的解决办法,请告诉我。
感谢您为我指明 ViewComponent 的方向。
有一个解决方法,您可以使用 Url.Action + JQuery 来呈现内容。
要呈现操作的视图将如下所示:
<div id="dynamicContentContainer"></div>
<script>
$.get('@Url.Action("GetData", "Home")', {id : 1}, function(content){
$("#dynamicContentContainer").html(content);
});
</script>
家庭控制器:
[HttpGet]
public IActionResult GetData(int id)
{
return PartialView(id);
}
景色
@model int
<span>Values from controler :</span> @Model
如果您想更好地控制请求,可以在此处阅读更多信息:jQuery.get()
只是为了完成上述问题,传递 ViewComponent class 的名称可能更安全,如下所示:
@section xyz{
@await Component.InvokeAsync(nameof(yournamespace.abc))
}
虽然通常使用 "Default" 作为结果视图,但您也可以 return 视图名称,如果它与默认值不同:
public class abcViewComponent : ViewComponent
{
private DbContextOptions<MyContext> db = new DbContextOptions<MyContext>();
public async Task<IViewComponentResult> InvokeAsync()
{
MyContext context = new MyContext(db);
IEnumerable<tableRowClass> mc = await context.tableRows.ToListAsync();
return View("YourViewName", mc);
}
}
我正在尝试从我的小型 ASP.NET MVC 4 应用程序切换到 ASP.NET 核心。
在我的 MVC 4 应用程序中,我有一个使用 RenderSection 的布局文件:
@RenderSection("xyz", required: false)
然后,在我的索引文件中,我有:
@section xyz{
@{Html.RenderAction("abc");}
}
因此,我正在从 Index 调用控制器操作方法 abc()。方法 abc() 传递模型对象和 returns 带有该模型的部分视图。 我无法使用 RenderPartial,因为它需要传递模型。
现在,在 ASP.NET Core 中,我没有 RenderAction() 方法。
我的问题是:如何从我的索引文件调用控制器操作方法?是否还有其他 HTML 助手(虽然我没有看到)?
.
我终于可以用 ViewComponent 来完成了。所以,我没有使用 RenderAction(),而是:
@section xyz{
@await Component.InvokeAsync("abc")
}
其中 abc 是一个 class 作为 abcViewComponent。 ViewComponent 看起来像:
public class abcViewComponent : ViewComponent
{
private DbContextOptions<MyContext> db = new DbContextOptions<MyContext>();
public async Task<IViewComponentResult> InvokeAsync()
{
MyContext context = new MyContext(db);
IEnumerable<tableRowClass> mc = await context.tableRows.ToListAsync();
return View(mc);
}
}
然后,我在新文件夹 'abc' 下创建了一个视图 Views/Home/Components/abc/Default.cshtml
请注意,视图名称是 Default.cshtml,这就是它的工作原理。如果谁有更好的解决办法,请告诉我。
感谢您为我指明 ViewComponent 的方向。
有一个解决方法,您可以使用 Url.Action + JQuery 来呈现内容。
要呈现操作的视图将如下所示:
<div id="dynamicContentContainer"></div>
<script>
$.get('@Url.Action("GetData", "Home")', {id : 1}, function(content){
$("#dynamicContentContainer").html(content);
});
</script>
家庭控制器:
[HttpGet]
public IActionResult GetData(int id)
{
return PartialView(id);
}
景色
@model int
<span>Values from controler :</span> @Model
如果您想更好地控制请求,可以在此处阅读更多信息:jQuery.get()
只是为了完成上述问题,传递 ViewComponent class 的名称可能更安全,如下所示:
@section xyz{
@await Component.InvokeAsync(nameof(yournamespace.abc))
}
虽然通常使用 "Default" 作为结果视图,但您也可以 return 视图名称,如果它与默认值不同:
public class abcViewComponent : ViewComponent
{
private DbContextOptions<MyContext> db = new DbContextOptions<MyContext>();
public async Task<IViewComponentResult> InvokeAsync()
{
MyContext context = new MyContext(db);
IEnumerable<tableRowClass> mc = await context.tableRows.ToListAsync();
return View("YourViewName", mc);
}
}