Fubumvc 注册显示模型和FubuControl的正确方法是什么?

Fubumvc 注册显示模型和FubuControl的正确方法是什么?,fubumvc,Fubumvc,最近,我开始将FubuMVC框架从2010年5月/6月之前的版本更新为最新版本 我遇到的最大障碍之一是如何配置FubuControl及其使用的显示模型,以便我可以在Site.Master页面中呈现这些控件。我遇到的一个FubuException错误消息是: FubuMVC Error 2102: Unknown input type ResourceDisplay 从FubuMVC.Core.Registration.Querying.ChainResolver第69行中的方法findun

最近,我开始将FubuMVC框架从2010年5月/6月之前的版本更新为最新版本

我遇到的最大障碍之一是如何配置FubuControl及其使用的显示模型,以便我可以在
Site.Master
页面中呈现这些控件。我遇到的一个
FubuException
错误消息是:

FubuMVC Error 2102:  
Unknown input type ResourceDisplay
FubuMVC.Core.Registration.Querying.ChainResolver
第69行中的方法
finduniquebynputtype
抛出

以下是我的Global.asax.cs,用于web项目:

public class Global : FubuStructureMapApplication
    {
        protected override void InitializeStructureMap(IInitializationExpression ex)
        {
            Bootstrapper.ScanAndRegisterTypesForStructureMap(ex, new List<Registry>
                        {
                            new WebAppWebRegistry(),
                            new AppSettingProviderRegistry()
                        });
            setup_service_locator();
        }


        private static void setup_service_locator()
        {
            ServiceLocator.SetLocatorProvider(() => new StructureMapServiceLocator(ObjectFactory.Container));
        }

        public override FubuRegistry GetMyRegistry()
        {
            return new WebAppFubuRegistry();
        }
    }

更多信息和更新: 我发现的部分问题是,当我更新项目时,我改变了:

public class SiteMasterView : FubuMasterPage<EmptyModel>, IFubuPage<EmptyModel>{ }
这意味着扩展功能
RenderPartial(此iBupPage视图页面)
不再可从
SiteMasterView
使用

这是旧的无效的
RenderPartial
调用
站点。Master

<%= this.RenderPartial().Using<ResourceTracker>().For(Get<UserResources>().Resources)%>
就在那时,我开始遇到由
链解析器发出的错误,我尝试了多种解决方案,包括创建一个
IFubuCommand
的实现,该实现生成了一个
ResourceDisplay
。此外,我还尝试在我的
FubuRegistry
中显式注册该部分。但是我没有幸运地通过
链式解析器


在FubuFramework中注册FubuControl及其视图模型的首选方法是什么

如何修复上述错误?

标记

第一:我想你要找的是
RenderPartialFor
。这应该仍然有效,即使在母版页上也是如此

第二:让我谈谈
RenderPartial*
Partial
之间的混淆

这是一个众所周知的问题,会给人们带来很多困惑。RenderPartial与Partial完全不同。我知道这很混乱,对不起。我们计划在FubumVC1.0的准备阶段尽快解决这个问题

RenderPartial不执行行为链/操作。这与ASP.NET WebForms中用户控件的工作方式非常相似。这是一个简单的UserControl呈现

然而,Partial对行为链/动作进行“部分调用”。这允许您在当前操作的上下文中调用不同的操作。因为它是一个部分调用,所以并不是所有的行为都被执行。例如,如果您有一个TransactionalBehavior在HTTP请求的生命周期内管理一个DB事务,然后您对一个行为链进行了Partial()调用,那么它不会产生一个新的DB事务

对行为进行编码时,需要知道这些行为决定是否适合在部分调用期间执行

因此,您需要决定是否希望使用
RenderPartial
(如简单的页眉/页脚或可重用的静态HTML块)来创建简单内容,或者是否需要在操作中执行一些逻辑,以使用
partial
方法生成绑定到局部视图的模型

Partial
的情况下,它仍将使用ASPX作为其视图,但ASPX不应具有完整的HTML(例如,没有开始标记或正文标记),因为它将始终从另一个视图加载到更大的HTML文档的中间。部分ASPX通常不应使用母版页等

任何操作都可以通过
Partial
调用,并通过其输入模型或反映其ControllerType.ActionMethod的lamda来识别。但是,我建议您不要使用
Partial
执行任何旧的操作,而要使用部分调用的操作

默认情况下,所有操作都将通过FubuMVC接收路由。对于部分操作,您可能不希望它们是可路由的(即,只能在服务器端的另一个操作的上下文中调用它们)。要指定这一点,您需要应用约定,让Fubu知道不要路由这些操作。默认情况下,FubuMVC有一个内置约定,即不使用
[FubuPartial]
属性路由任何操作。如果不想,您不必使用此约定,但它很方便,因为它是为您自动内置的


如果您希望使用jQuery$.load()AJAX方法从web浏览器加载服务器上的部分HTML内容(即,页面上的某些内容发生了更改,并且您希望在不重新加载整个页面/屏幕的情况下刷新服务器上的某些内容),则可能需要执行部分操作并创建路由.

这里没有足够的信息。您是否可以发布站点.Master的一部分,或者至少是调用控件的部分?@chadmyers-我已经添加了有关我的问题的更多信息和详细信息,包括
Site.Master
中的相关调用。我注意到了您的问题。你是如何设置你的约定的?@David-你能重述一下你想要的信息吗?
public class SiteMasterView : FubuMasterPage
<%= this.RenderPartial().Using<ResourceTracker>().For(Get<UserResources>().Resources)%>
<% this.Partial<ResourceDisplay>(); %>