簡體   English   中英

與ASP.NET Core中的Html.RenderAction等效

[英]Equivalent of Html.RenderAction in ASP.NET Core

我試圖從我的小型ASP.NET MVC 4應用程序切換到ASP.NET Core。

在我的MVC 4應用程序中,我有一個使用RenderSection的Layout文件:

@RenderSection("xyz", required: false)

然后,在我的索引文件中,我有:

@section xyz{
        @{Html.RenderAction("abc");}
    }

因此,我正在從索引中調用控制器操作方法abc()。 方法abc()傳遞模型對象,並返回該模型的局部視圖。 我不能使用RenderPartial,因為它需要傳遞模型。

現在,在ASP.NET Core中,我沒有RenderAction()方法。

我的問題是:如何從索引文件中調用控制器操作方法? 是否還有其他HTML幫助器(盡管我看不到)?

我終於能夠使用ViewComponent做到這一點。 因此,我沒有使用RenderAction(),而是:

@section xyz{
        @await Component.InvokeAsync("abc")
    }

其中abc是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的方向。

僅為了完成上述問題,傳遞ViewComponent類的名稱可能更安全,如下所示:

@section xyz{
    @await Component.InvokeAsync(nameof(yournamespace.abc))
}

盡管通常使用“默認”作為結果視圖,但如果它與默認名稱不同,也可以返回視圖名稱:

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);
    }
}

有一種解決方法,您可以使用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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM