かみそりページに型付きモデル サブページを含めたい。SS は MVC カミソリと同じではないことはわかっています。やり方が少し違うかもしれません。
これまでのところ、これは私が考え出したものです(醜いように見えます...):
//this is somewhere in your default.cshtml
@{
//grab your service from Ioc
using(var service = Get<RockstarsService>()) {
//execute the service to get a response
var resp = service.Get(new Rockstars());
//call the partial razor page Rockstar.cshtml
<p>@Html.Partial("Rockstars",resp)</p>
//or @Html.Partial("Rockstars") will do, seems like the resp is cached anyway
//or @Include("Rockstars",resp) will work, too.
}
}
このソリューションは、サブページに html ヘルパーが含まれていないという条件で、型付きモデルのサブページで機能します。
ただし、サブページに次のような html ヘルパーがある場合
@Html.Label("sometag") //PROBLEM HERE <---------------------
または
@Html.TextBox("name","text") //PROBLEM HERE <---------------------
次に、サーバー エラーがスローされます。
Server Error in '/' Application.
Could not execute partial: Rockstars, model: RazorRockstars.WebHost.RockstarsResponse
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: Could not execute partial: Rockstars, model: RazorRockstars.WebHost.RockstarsResponse
Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace: [InvalidOperationException: Could not execute partial: Rockstars, model: RazorRockstars.WebHost.RockstarsResponse]
ServiceStack.Razor.Templating.TemplateService.RenderPartial(T model, String name) +333
ServiceStack.Razor.RazorFormat.RenderPartial(String pageName, Object model, Boolean renderHtml, IHttpRequest httpReq) +433
ServiceStack.Html.HtmlHelper.Partial(String viewName, Object model) +117
CompiledRazorTemplates.Dynamic.fdbaecbccda.Execute() +454
ServiceStack.Razor.Templating.TemplateService.ExecuteTemplate(T model, String name, String defaultTemplatePath, IHttpRequest httpReq, IHttpResponse httpRes) +457
ServiceStack.Razor.RazorFormat.ExecuteTemplate(T model, String name, String templatePath, IHttpRequest httpReq, IHttpResponse httpRes) +117
ServiceStack.Razor.RazorFormat.ProcessRazorPage(IHttpRequest httpReq, ViewPageRef razorPage, Object dto, IHttpResponse httpRes) +142
ServiceStack.Razor.RazorHandler.ProcessRequest(IHttpRequest httpReq, IHttpResponse httpRes, String operationName) +535
ServiceStack.WebHost.Endpoints.Support.EndpointHandlerBase.ProcessRequest(HttpContext context) +264
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +341
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
(血まみれの VS Razor ブレークポイントは、MVC プロジェクトではなく純粋な SS であるため機能しません。そのため、問題を特定するのは困難です...しかし、それは別の話です)
どんな助けでも素晴らしいでしょう。