簡體   English   中英

ASP.NET CORE 將 Razor 視圖渲染為帶有控制器參數的字符串

[英]ASP.NET CORE Render Razor View to string with controller parameters

我需要將部分視圖呈現為字符串。 為此,我使用以下 Helper 類:

public static string RenderRazorViewToString(Controller controller, string viewName, object model = null)
{
    controller.ViewData.Model = model;
    using (var sw = new StringWriter())
    {
        IViewEngine viewEngine =
            controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as
                ICompositeViewEngine;
        ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, false);

        ViewContext viewContext = new ViewContext(
            controller.ControllerContext,
            viewResult.View,
            controller.ViewData,
            controller.TempData,
            sw,
            new HtmlHelperOptions()
        );
        viewResult.View.RenderAsync(viewContext);
        return sw.GetStringBuilder().ToString();
    }
}

這有效,但我現在需要一個類似的方法,它也接受參數列表。 我想呈現為字符串的視圖通過以下控制器方法調用:

public Task<IActionResult> IndexPartial(string? searchValue, string? filterValue)
{
   IQueryable<Invoice> query
   ....Manipulate query by searchValue and filterValue
   return PartialView("IndexPartial",await query.ToListAsync());
}

當我調用Helper.RenderRazorViewToString(controller, "IndexPartial", model)我必須傳遞 stringValue 和 FilterValue。

有誰知道如何實現這一目標?

RenderRazorViewToString的用法我想你應該明白了,這個方法是通過如下代碼調用的:

Helper.RenderRazorViewToString(controller, "PartialViewName", model);

第二個參數不是方法名,它是局部視圖名稱。它不會到達IndexPartial方法。

您想要的是將帶有模型的部分視圖解析為filterValue 。模型數據通過通過searchValuefilterValue操作查詢獲得。

為了滿足您的要求,您需要做的應該是以下內容:

public string IndexPartial(string? searchValue, string? filterValue)
{
    var model = _context.Pupils
                    .Where(a => a.Name.Contains(searchValue)&& a.Email.Contains(filterValue))
                    .FirstOrDefault();  //Manipulate query by searchValue and filterValue
     
    //pass the correct model to the RenderRazorViewToString method
    //then it would render the partial view to the correct string
    var data = Helper.RenderRazorViewToString(this, "PartialViewName", model);
    return data;
}

結果: 在此處輸入圖片說明

Maybe you can use an expression instead of a string parameter, like the following:

conditionLambda: p => true, orderLambda: p => p.Naam

   public PagingViewModel<T> GetPaging(int page, int pagesize, Expression<Func<T, bool>> conditionLambda, Expression<Func<T, object>> orderLambda)
    {
        var items = _context.Set<T>()
                        .Where(conditionLambda)
                        .OrderBy(orderLambda)
                        .Skip(page * pagesize)
                        .Select(t => t)
                        .Take(pagesize)
                        .ToList(); 

暫無
暫無

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

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