Javascript 将旧ASP.NET应用程序中的ExtJS从2.3升级到6

Javascript 将旧ASP.NET应用程序中的ExtJS从2.3升级到6,javascript,asp.net,extjs,Javascript,Asp.net,Extjs,正在寻求帮助。TLDR版本:我们有一个利用ExtJS 2.3的ASP.NET web应用程序,我们希望升级到当前的ExtJS版本。试着让我了解我们的目的 现在了解详情。我会先说我不是ExtJS和.NET开发方面的专家。事实上,对于web开发,我几乎是一个新手,所以请原谅我对术语的错误解释或误用。我的团队正在我们公司多年前开发的“定制”框架上开发一个web应用程序。它基于一些可重新运行的代码生成工具,这些工具获取xml模板并输出必要的代码文件。我们的项目是一个ASP.NET MVP应用程序,它使用

正在寻求帮助。TLDR版本:我们有一个利用ExtJS 2.3的ASP.NET web应用程序,我们希望升级到当前的ExtJS版本。试着让我了解我们的目的

现在了解详情。我会先说我不是ExtJS和.NET开发方面的专家。事实上,对于web开发,我几乎是一个新手,所以请原谅我对术语的错误解释或误用。我的团队正在我们公司多年前开发的“定制”框架上开发一个web应用程序。它基于一些可重新运行的代码生成工具,这些工具获取xml模板并输出必要的代码文件。我们的项目是一个ASP.NET MVP应用程序,它使用.aspx页面和NHibernate进行ORM。我们的UI是从ExtJS创建的,控件在每个页面的.js文件中定义,然后在.aspx页面中“组装”。codebehind包含利用C#代码演示者的web方法。我已经包括了一个片段来演示我下面要说的内容

.aspx页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Entity.aspx.cs" Inherits="View.Example.EntityView" MasterPageFile="~/MasterPages/Content.Master" %>
<asp:Content ID="Content1" runat="server">
<script language="javascript" type="text/javascript" src="~/Scripts/ext-2.2.1/ext-all.js"></script>
<script language="javascript" type="text/javascript" src="<%=ResolveUrl("~/Scripts/Factory/Example/Entity.js")%>"></script>
<script language="javascript" type="text/javascript">

var localConfig = new panelConfig();

localConfig.applyExtendedConfig('default_page');

localConfig.addItem(new Ext.grid.GridPanel(pageConfigs.default_page_ManageEntity));
localConfig.addItem(
    new Ext.form.Hidden({
    id: 'ManageEntityGrid_Rows'
    }));
var default_page = localConfig.createExt();
default_page.on('render', default_page_OnShow, default_page, { single: true });

</script>
</asp:Content>
.aspx.cs文件:

[WebMethod()]
public static ExtJSGridData GetManageEntity(PageProxyArgs args)
{
    var watch = new Stopwatch();
    watch.Start();

    try
    {
        var data = new ExtJSGridData();
        var criteria = GetManageEntityQuery(args);
        criteria.SetFirstResult(args.Start).SetMaxResults(args.Limit);
        data.Results = GetDataManageEntity(args.RecordId, criteria);
        criteria.SetFirstResult(0).SetMaxResults(RowSelection.NoValue);
        criteria.ClearOrders();
        data.Total = criteria.SetProjection(Projections.CountDistinct("Id")).UniqueResult<int>();
        data.UserUiStateSaved = UserUiStateHelper.SaveUserUiStateInTransaction(args.UserUiState);
        watch.Stop();
        PageLogHelper.CurrentLog.ServerTime = watch.ElapsedMilliseconds;
        return data;
    }
    catch (Exception ex)
    {
        LogManager.GetLogger((MethodBase.GetCurrentMethod().DeclaringType)).Error(ex);
        ErrorHandler.LogError(ex);
        throw;
    }
}

private static IList GetDataManageEntity(int id, ICriteria criteria)
{
    var list = criteria.List<Model.BusinessObjects.Entity>();
    var jsonList = Model.BusinessObjects.Entity.ToJSON(list);
    return jsonList;
}

private static ICriteria GetManageEntityQuery(PageProxyArgs args)
{
    ICriteria criteria = StaticPresenter.GetEntity();

    var helper = new GridFilterHelper(criteria, args, _dManageEntityLookupSortInfo);
    helper.ApplyFilterMap(EntityJSON.GetGridFilterMap(criteria, args.Filters));

    MapManageEntityFilters(args.Filters, criteria);
    helper.ApplyFilters();

    if (args.SortInfo == null || string.IsNullOrEmpty(args.SortInfo.FieldName))
        return criteria;

    IList<IProjection> sortMap = StaticPresenter.GetSortMap_ManageEntity(args.SortInfo.FieldName, args.RecordId, args.ExtraParams, criteria);
    if (sortMap == null)
        sortMap = EntityJSON.GetSortMap(args.SortInfo.FieldName, criteria);

    helper.ApplySort(sortMap);

    return criteria;
}
[WebMethod()]
公共静态ExtJSGridData GetManageEntity(PageProxyArgs-args)
{
var watch=新秒表();
watch.Start();
尝试
{
var data=新的ExtJSGridData();
var-criteria=GetManageEntityQuery(args);
criteria.SetFirstResult(args.Start).SetMaxResults(args.Limit);
data.Results=GetDataManageEntity(args.RecordId,条件);
条件.SetFirstResult(0).SetMaxResults(RowSelection.NoValue);
criteria.ClearOrders();
data.Total=criteria.SetProjection(Projections.CountDistinct(“Id”)).UniqueResult();
data.UserUiStateSaved=useruistateheloper.saveuseruistateintersaction(args.UserUiState);
看,停;
PageLogHelper.CurrentLog.ServerTime=watch.ElapsedMilliseconds;
返回数据;
}
捕获(例外情况除外)
{
LogManager.GetLogger((MethodBase.GetCurrentMethod().DeclaringType)).Error(ex);
ErrorHandler.LogError(ex);
投掷;
}
}
私有静态IList GetDataManageEntity(int id,ICriteria标准)
{
var list=criteria.list();
var jsonList=Model.BusinessObjects.Entity.ToJSON(列表);
返回jsonList;
}
专用静态ICriteria GetManagementQuery(PageProxyArgs-args)
{
ICriteria条件=StaticPresenter.GetEntity();
var helper=新的GridFilterHelper(条件、参数、_-dManageEntityLookupSortInfo);
ApplyFilterMap(EntityJSON.GetGridFilterMap(criteria,args.Filters));
MapManagementFilters(args.Filters,条件);
helper.ApplyFilters();
if(args.SortInfo==null | | string.IsNullOrEmpty(args.SortInfo.FieldName))
退货标准;
IList sortMap=StaticPresenter.GetSortMap_ManageEntity(args.SortInfo.FieldName、args.RecordId、args.ExtraParams、criteria);
if(sortMap==null)
sortMap=EntityJSON.GetSortMap(args.SortInfo.FieldName,条件);
ApplySort(sortMap);
退货标准;
}
这就是问题所在。如前所述,我们使用的ExtJS版本是2.3,我们希望升级到当前版本。我已经做了一些谷歌搜索和翻阅sencha文档的初始作业,但有些事情我还不清楚,希望在我开始着手这项工作之前得到解决。我试图在下面概述我的具体问题

首先也是最重要的一点:我们的应用程序的构建方式是否可以使用ExtJS6?我的意思是利用ExtJSAPI在.js文件中定义控件,然后在.NETC#主干上创建UI。根据其他用户的更改说明和问题,很明显在2.3和6之间发生了大量(轻描淡写的)更改。我想我的意思是,根据我读到的内容,你现在似乎可以构建你的整个应用程序,包括ExtJS中的模型和视图(以及控制器?)。这是一个要求,还是我们仍然可以在.NETC#模型和视图之上放置ExtJS控件

作为跟进,我已经看到了有关Sencha CMD的参考资料,用于创建和构建应用程序等。无论发生什么情况,CMD都是必需的吗?或者我们可以像现在这样简单地引用ExtJS库吗

假设问题1的答案是肯定的,这是可能的,下一个明显的问题是:这将需要多少工作?让我们把“很多”的答案弄清楚——我知道。我所知道的是,我们必须更新所有模板以使用新的API语法(new Ext…to Ext.create()等)。我没意见。我想弄明白的是我不知道的。假设我更新了所有语法,我们的应用程序会工作吗?或者为了让它正常工作,我还需要修改/修复其他东西吗

与问题2相关:根据我的阅读,控件的数据存储方式似乎已经改变,它们现在使用ExtJS中定义的模型。这是要求吗?如前所述,我们目前正在aspx.cs文件中使用web方法。我需要在ExtJS中复制我们的C#模型吗

最后,我看到这个问题问了很多,但我似乎找不到一个明确的答案。古典与现代?我通常看到的答案是,modern更倾向于触摸屏和现代浏览器,而classic更倾向于桌面用户。我也在一些地方读到过,现代电脑的可用控件较少。我们的web应用程序是在本地环境下运行的,将来不会移动,这让我认为经典可能是正确的选择?我想我只是想知道技术上的区别是什么


我肯定有些东西我甚至不知道我错过了。欢迎您提供任何反馈。

这是可能的,但您必须大量书写。就在三周前,我不得不利用3.4 AS
[WebMethod()]
public static ExtJSGridData GetManageEntity(PageProxyArgs args)
{
    var watch = new Stopwatch();
    watch.Start();

    try
    {
        var data = new ExtJSGridData();
        var criteria = GetManageEntityQuery(args);
        criteria.SetFirstResult(args.Start).SetMaxResults(args.Limit);
        data.Results = GetDataManageEntity(args.RecordId, criteria);
        criteria.SetFirstResult(0).SetMaxResults(RowSelection.NoValue);
        criteria.ClearOrders();
        data.Total = criteria.SetProjection(Projections.CountDistinct("Id")).UniqueResult<int>();
        data.UserUiStateSaved = UserUiStateHelper.SaveUserUiStateInTransaction(args.UserUiState);
        watch.Stop();
        PageLogHelper.CurrentLog.ServerTime = watch.ElapsedMilliseconds;
        return data;
    }
    catch (Exception ex)
    {
        LogManager.GetLogger((MethodBase.GetCurrentMethod().DeclaringType)).Error(ex);
        ErrorHandler.LogError(ex);
        throw;
    }
}

private static IList GetDataManageEntity(int id, ICriteria criteria)
{
    var list = criteria.List<Model.BusinessObjects.Entity>();
    var jsonList = Model.BusinessObjects.Entity.ToJSON(list);
    return jsonList;
}

private static ICriteria GetManageEntityQuery(PageProxyArgs args)
{
    ICriteria criteria = StaticPresenter.GetEntity();

    var helper = new GridFilterHelper(criteria, args, _dManageEntityLookupSortInfo);
    helper.ApplyFilterMap(EntityJSON.GetGridFilterMap(criteria, args.Filters));

    MapManageEntityFilters(args.Filters, criteria);
    helper.ApplyFilters();

    if (args.SortInfo == null || string.IsNullOrEmpty(args.SortInfo.FieldName))
        return criteria;

    IList<IProjection> sortMap = StaticPresenter.GetSortMap_ManageEntity(args.SortInfo.FieldName, args.RecordId, args.ExtraParams, criteria);
    if (sortMap == null)
        sortMap = EntityJSON.GetSortMap(args.SortInfo.FieldName, criteria);

    helper.ApplySort(sortMap);

    return criteria;
}