2

由于我在 C# CodeBehind 中的 CommandName 属性和匹配方法的调用之间没有找到正确的联系,我很想知道幕后发生的事情以及谁触发了哪个事件以及这两者之间的联系是如何出现的.

这是我的示例代码:

 <ColumnModel ID="ColumnModel1" runat="server">
            <Columns>
                <ext:CommandColumn ButtonAlign="Center">
                    <Commands>
                        <ext:GridCommand Icon="User" CommandName="SwitchToUserDetail" Text="Details"></ext:GridCommand> 
                    </Commands>
                </ext:CommandColumn>
            </Columns>
        </ColumnModel>  


    <DirectEvents>
        <Command OnEvent="SwitchToUserDetail" >
            <ExtraParams>
                <ext:Parameter Name="ID" Value="this.selModel.getSelected().data.id" Mode="Raw" />
            </ExtraParams>
        </Command>
    </DirectEvents>

到目前为止一切正常,但再次,只是为了澄清并希望用我糟糕的英语更好地解释它:

这个属性

CommandName="SwitchToUserDetail"

与我的 DirectEvent 有一些联系

<Command OnEvent="SwitchToUserDetail" >
        <ExtraParams>
            <ext:Parameter Name="ID" Value="this.selModel.getSelected().data.id" Mode="Raw" />
        </ExtraParams>
    </Command>

如果我查看我的 CodeBehind 中定义了我的方法 SwitchToUserDetail 的地方,我不会得到原因,我将获得我的 DirectEvent 的对象和 DirectEventArgs,而那件事与 GridCommand 没有更多关系......

对此有何解释?

4

1 回答 1

2

CommandName 与后面代码中的方法之间的连接,由命令名称值提供。如果您查看由 Ext.NET 生成的 JavaScript 代码,您会看到如下内容:

directEvents: {
command: {fn:function(command,record,rowIndex,colIndex){var params=arguments;
    Ext.net.DirectEvent.confirmRequest({
        extraParams: {"ID":'id'}
        ,control:this,action:'Command'});},delay:20}
} 

如您所见,调用您的 DirectEvent 的处理程序具有以下参数:command,record,rowIndex,colIndex。如果您将新的额外参数“命令”添加到直接事件,您可以相应地做出不同的命令。

<Command OnEvent="SwitchToUserDetail" >
    <ExtraParams>
        <ext:Parameter Name="ID" Value="this.selModel.getSelected().data.id" Mode="Raw" />
        <ext:Parameter Name="command" Value="command" Mode="Raw" />
    </ExtraParams>
</Command>

在服务器端,您可以按如下方式阅读:

e.ExtraParams[“命令”]

于 2011-11-02T22:05:52.983 回答