servicestack,.net,Razor,servicestack" /> servicestack,.net,Razor,servicestack" />

.net 作为ServiceStack Razor模型的接口

.net 作为ServiceStack Razor模型的接口,.net,razor,servicestack,.net,Razor,servicestack,我对ServiceStack比较陌生,但我喜欢迄今为止看到的东西。但是我在这件事上遇到了困难- 这就是我的剃须刀模板的样子- @inherits ViewPage<IChallenge> @{ foreach (var codeFile in Model.CodeFiles) { //do something here } } @继承ViewPage @{ foreach(Model.CodeFiles中的var代码文件) { //在这里做点什么 } }

我对ServiceStack比较陌生,但我喜欢迄今为止看到的东西。但是我在这件事上遇到了困难-

这就是我的剃须刀模板的样子-

@inherits ViewPage<IChallenge>

@{
    foreach (var codeFile in Model.CodeFiles)
    {
//do something here
    }
}
@继承ViewPage
@{
foreach(Model.CodeFiles中的var代码文件)
{
//在这里做点什么
}
}
在这里,IChallenge是一个接口,服务在返回时动态选择该接口的给定实现。服务连接到返回接口本身,因此-

public class WebChallenge : IReturn<IChallenge> { /* properties */ }
公共类网络挑战:IReturn{/*properties*/}
但是,当我运行代码时,出现以下错误-

无法将类型“ServiceStack.Razor.Compilation.RazordDynamicObject”隐式转换为“IChallenge”。存在显式转换(是否缺少强制转换?)

将此作为完整堆栈的响应-

<?xml version="1.0"?>
<Challenge1Response xmlns="" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ResponseStatus> 
<ErrorCode>RuntimeBinderException</ErrorCode> 
<Message>Cannot implicitly convert type 'ServiceStack.Razor.Compilation.RazorDynamicObject' to 'CodeGuru.Exercises.IChallenge'. An explicit conversion exists (are you missing a cast?)</Message> 
<StackTrace> at CallSite.Target(Closure , CallSite , Object ) 
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0) 
at ServiceStack.Razor.Templating.TemplateBase`1.get_Model() 
at CompiledRazorTemplates.Dynamic.faaccadc.Execute() 
at ServiceStack.Razor.Templating.TemplateService.ExecuteTemplate[T](T model, String name, String defaultTemplatePath, IHttpRequest httpReq, IHttpResponse httpRes) 
at ServiceStack.Razor.RazorFormat.ExecuteTemplate[T](T model, String name, String templatePath, IHttpRequest httpReq, IHttpResponse httpRes) 
at ServiceStack.Razor.RazorFormat.ProcessRazorPage(IHttpRequest httpReq, ViewPageRef razorPage, Object dto, IHttpResponse httpRes) 
at ServiceStack.Razor.RazorFormat.ProcessRequest(IHttpRequest httpReq, IHttpResponse httpRes, Object dto) 
at ServiceStack.WebHost.Endpoints.Formats.HtmlFormat.&lt;&gt;c__DisplayClass1.&lt;SerializeToStream&gt;b__0(IViewEngine x) 
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate) 
at ServiceStack.WebHost.Endpoints.Formats.HtmlFormat.SerializeToStream(IRequestContext requestContext, Object response, IHttpResponse httpRes) 
at ServiceStack.WebHost.Endpoints.Extensions.HttpResponseExtensions.WriteToResponse(IHttpResponse response, Object result, ResponseSerializerDelegate defaultAction, IRequestContext serializerCtx, Byte[] bodyPrefix, Byte[] bodySuffix)
</StackTrace> 
</ResponseStatus> 
</Challenge1Response>

RuntimeBinderException
无法将类型“ServiceStack.Razor.Compilation.RazordDynamicObject”隐式转换为“CodeGuru.Exchanges.iCharlenge”。存在显式转换(是否缺少强制转换?)
目标(闭包、调用站点、对象)
在System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](调用站点,T0 arg0)
位于ServiceStack.Razor.Templating.TemplateBase`1.get_Model()
在CompiledRazorTemplates.Dynamic.faaccadc.Execute()处
在ServiceStack.Razor.Templating.TemplateService.ExecuteTemplate[T](T模型,字符串名称,字符串defaultTemplatePath,IHttpRequest httpReq,IHttpResponse httpRes)
在ServiceStack.Razor.RazorFormat.ExecuteTemplate[T](T模型,字符串名称,字符串模板路径,IHttpRequest httpReq,IHTTPreponse httpRes)
在ServiceStack.Razor.RazorFormat.ProcessRazorPage(IHttpRequest httpReq、ViewPageRef razorPage、Object dto、IHTTPreponse httpRes)
在ServiceStack.Razor.RazorFormat.ProcessRequest(IHttpRequest httpReq、IHTTPreponse httpRes、对象dto)
在ServiceStack.WebHost.Endpoints.Formats.HtmlFormat.c__DisplayClass1.SerializeToStreamb__0(IViewEngine x)中
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source,Func`2谓词)
在ServiceStack.WebHost.Endpoints.Formats.HtmlFormat.SerializeToStream(IRequestContext请求上下文、对象响应、IHttpResponse httpRes)
在ServiceStack.WebHost.Endpoints.Extensions.HttpResponseExtensions.WriteToResponse(IHttpResponse响应、对象结果、ResponseSerializerDelegate默认操作、IRequestContext serializerCtx、字节[]bodyPrefix、字节[]bodySuffix)
如果我使用特定的实现,这个错误就会消失,但是我需要能够在运行时发送任何选择的实现。有什么想法吗

编辑:


我注意到,如果接口被包装为另一个强类型对象的属性,并且该对象被用作视图中的模型,那么它工作正常,我也可以访问接口属性。这可能是一项工作,但我想知道是否有人知道一个更好的答案,因为这感觉像是在跳圈

您是否尝试过抽象基类,或者只是基类,而不是接口

公共抽象类挑战:IChallenge

{ }

公开课网络挑战:挑战,IReturn

{ }

然后在剃刀里


@继承ViewPage

我还没有尝试过,但它更像是一种变通方法——我想知道如何使一个简单的界面作为视图的模型工作。