1
asp.netコア1.0(フルフレームワーク4.6.1)では、部分ビューを文字列にレンダリングする必要があったため、https://gist.github.com/ahmad-moussawi/1643d703c11699a6a4046e57247b4d09に基づいて、私は次のように以前ViewBagコントローラに設定asp.netコア1.0のレンダリング部分ビューの場合
string render = _viewRender.Render("Directory/_DirectoryData", directory);
データ:
public class ViewRender
{
private IRazorViewEngine _viewEngine;
private ITempDataProvider _tempDataProvider;
private IServiceProvider _serviceProvider;
public ViewRender(
IRazorViewEngine viewEngine,
ITempDataProvider tempDataProvider,
IServiceProvider serviceProvider)
{
_viewEngine = viewEngine;
_tempDataProvider = tempDataProvider;
_serviceProvider = serviceProvider;
}
public string Render<TModel>(string view, TModel model)
{
var actionContext = GetActionContext();
var viewEngineResult = _viewEngine.FindView(actionContext, view, false);
if (!viewEngineResult.Success)
{
throw new InvalidOperationException(string.Format("Couldn't find view '{0}'", view));
}
var viewResult = viewEngineResult.View;
using (var output = new StringWriter())
{
var viewContext = new ViewContext(
actionContext,
viewResult,
new ViewDataDictionary<TModel>(
metadataProvider: new EmptyModelMetadataProvider(),
modelState: new ModelStateDictionary())
{
Model = model
},
new TempDataDictionary(
actionContext.HttpContext,
_tempDataProvider),
output,
new HtmlHelperOptions());
viewContext.Vi
viewResult.RenderAsync(viewContext).GetAwaiter().GetResult();
return output.ToString();
}
}
private ActionContext GetActionContext()
{
var httpContext = new DefaultHttpContext();
httpContext.RequestServices = _serviceProvider;
return new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
}
}
しかしコントローラがPartialViewを呼び出す:RenderViewを作成しました。コンボボックスのアイテムのためにそれらを使用する際に
ViewBag.ParticipantTypesList = _dbInstance.ParticipantTypes;
ViewBag.DirectoryList = _dbInstance.Directories;
ViewBag.TaxCategoryList = _dbInstance.TaxCategories;
は存在しません:
<label asp-for="DirectoryItem_DirectoryItem" class="form-control-label"></label>
<select asp-for="DirectoryItem_DirectoryItem" asp-items="@(new SelectList(ViewBag.DirectoryList, "Id", "DirectoryId", null))" class="form-control">
<option>--- Seleccione ---</option>
</select>
とレンダーは、例外がスローされます。 ViewBagを取得または転送する方法を教えてください。
¿_viewEngine.FindView(...)または_viewEngine.FindPage(...)を使用する必要がありますか?
ありがとうございました