1
私のAsp.Net MVC 5プロジェクトの1つをAsp.Net Coreに移行します。私は、リクエストがajaxリクエストであればビューを部分ビューとしてレンダリングするカスタムActionResultを持っていて、リクエストが通常のリクエストであった場合、ビューを通常のビューとしてレンダリングします。古いExecuteResultを新しいExecuteResultAsyncに変換する際に問題があります。 - >するactionContext移行ASP.Net MVC 5 ExecuteResultをASP.Netに変換する方法ExecuteResultAsync
public override async Task ExecuteResultAsync(ActionContext context)
{
context.HttpContext.Response.Buffer = true; //broken
context.HttpContext.Controller.ViewData.Model = Model; //broken
using (var sw = new StringWriter())
{
var request = context.HttpContext.Request;
if (string.IsNullOrEmpty(ViewName))
ViewName = context.ActionDescriptor.Name;
var engine = context.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
var viewResult = request.Headers["X-Requested-With"] == "XMLHttpRequest"
? engine.FindPartialView(context, ViewName)
: engine.FindView(context, ViewName);
var viewContext = new ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw, new HtmlHelperOptions()); //broken
await viewResult.View.RenderAsync(viewContext);
await context.HttpContext.Response.WriteAsync(sw.GetStringBuilder().ToString());
}
}
私の主な問題は、ControllerContextである:それは私の半分は、コードを変換され、ここで
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.Buffer = true;
context.Controller.ViewData.Model = Model;
using (var sw = new StringWriter())
{
var request = context.RequestContext.HttpContext.Request;
if (string.IsNullOrEmpty(ViewName))
{
ViewName = request.RequestContext.RouteData.GetRequiredString("action");
}
var viewResult = request.IsAjaxRequest()
? ViewEngines.Engines.FindPartialView(context, ViewName)
: ViewEngines.Engines.FindView(context, ViewName, "_Layout");
var viewContext = new ViewContext(context, viewResult.View, context.Controller.ViewData, context.Controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
context.HttpContext.Response.Write(sw.GetStringBuilder().ToString());
}
}
そして:
は、ここでは、私の古いコードです。 ControllerContextをActionContextに変換する手助けをしてください。どうもありがとうございました!
ありがとうございます、私はそれをチェックします! – martonx
この行には次のエラーがあります。var tempData = new TempDataDictionary(context.HttpContext、tempDataProvider); //引数1: 'Microsoft.AspNet.Http.HttpContext'から 'Microsoft.AspNet.Http.IHttpContextAccessor'に変換できません。 – martonx
これは正しい行でなければなりません。var tempData = new TempDataDictionary(新しいHttpContextAccessor {HttpContext = context.HttpContext} 、tempDataProvider); – martonx