Model view controller DotNetNuke MVC路由冲突

Model view controller DotNetNuke MVC路由冲突,model-view-controller,routing,dotnetnuke,Model View Controller,Routing,Dotnetnuke,我有许多DotNetNuke MVC模块,其配置如下: 路由配置 namespace IMT.LH.AssociationAdmin { using System; using DotNetNuke.Web.Mvc.Routing; public class RouteConfig : IMvcRouteMapper { public void RegisterRoutes(IMapRoute mapRouteManager)

我有许多DotNetNuke MVC模块,其配置如下:

路由配置

    namespace IMT.LH.AssociationAdmin
    {
    using System;
    using DotNetNuke.Web.Mvc.Routing;
    public class RouteConfig : IMvcRouteMapper
    {
        public void RegisterRoutes(IMapRoute mapRouteManager)
        {
            mapRouteManager.MapRoute(
                moduleFolderName: "LH.AssociationAdmin",
                routeName: "LH.AssociationAdmin",
                url: "{controller}/{action}",
                namespaces: new[] {"IMT.LH.AssociationAdmin.Controllers"});
        }
    }
}
控制器

namespace IMT.LH.AssociationAdmin.Controllers
{
    [DnnHandleError]
    public class AssociationController : DnnController
    {

        [ModuleAction(ControlKey = "Display", TitleKey = "DisplayOrganization")]
        public ActionResult Index()
        {
            DotNetNuke.Framework.JavaScriptLibraries.JavaScript.RequestRegistration(CommonJs.DnnPlugins);

            var Associations = new IMS.Model.lh.AssociationsController().Gets().Recordset;
            var AssociationSelectList =
                from c in Associations
                select new SelectListItem
                {
                    Selected = false,
                    Text = c.Title,
                    Value = c.AssociationID.ToString()
                };
            var tlist = AssociationSelectList.ToList();
            tlist.Insert(0,new SelectListItem{Selected=true,Text=@"Create...",Value="-1"});

            ViewBag.SelectAssociation = new SelectList(tlist, "Value", "Text", -1);
            return View("Index");
        }

        [HttpPost]
        [DotNetNuke.Web.Mvc.Framework.ActionFilters.ValidateAntiForgeryToken]
        public ActionResult SelectAssociation()
        {
            ModelState.Clear();
            var id = Convert.ToInt32(Request.Form["id"]);
            using (var ac = new AssociationsController())
            {
                ac.GetById(id);
                return Json(ac.CurrentRec);
            }
        }
    }
}
所有模块上的一切都很好。我有一些ajax post语句可以按预期工作:

$.ajax({
            cache: false,
            dataType: 'json',
            url: "/DesktopModules/MVC/LH.AssociationAdmin/Association/SaveEdits",
            method: "Post",
我们刚买了一辆现成的购物车。当我安装它时,它返回了一个错误。与供应商交谈后,他们说:

问题基本上是由“IMT.LH.AssociationAdmin.RouteConfig”中的注册路由导致从“/DesktopModules/RazorCart/AdminConsole”重定向到“/DesktopModules/MVC/LH.AssociationAdmin” 您有一个名为“LH.AssociationAdmin”的模块,程序集文件是“LH.AssociationAdmin.dll”。这是一个MVC模型,使用DNN MVC,模块应通过模块定义控件注册其路由,该模块正在这样做,但它也通过“IMvcRouteMapper”注册另一个路由。我知道模块也需要API,但这应使用“IServiceRouteMapper”来完成

我试图将我的路线转换为iSeries VictorOuterMapper:

using DotNetNuke.Web.Api;
    public class RouteMapper : IServiceRouteMapper
    {
        public void RegisterRoutes(IMapRoute mapRouteManager)
        {
            mapRouteManager.MapHttpRoute("LH.AssociationAdmin", "LH.AssociationAdmin", "{controller}/{action}", new[] {"IMT.LH.AssociationAdmin.Controllers"});
        }
    }
然而,我的post命令不再有效。然后我尝试将控制器中的基类更改为DnnApiController,但无法使用ViewBag、Request.Form和其他一些方法


我怎样才能完成所有这些工作?

好的。这是一个路线冲突的问题。我的模块说明了这一点。没有。因此,我在每个模块中创建了一条不会与第三方软件冲突的路由。致:

public class RouteConfig : IMvcRouteMapper
{
    public void RegisterRoutes(IMapRoute mapRouteManager)
    {
                mapRouteManager.MapRoute(

                    "LH.AssociationAdmin", 
                    "LH.AssociationAdmin", 
                    "{controller}/{action}/{IMTAssociationAdminId}",
                    new[] {"IMT.LH.AssociationAdmin.Controllers"});
    }
}
在本例中,我添加了一个名为IMTAssocationAdminId的伪参数,ajax如下所示:

$.ajax({
                cache: false,
                dataType: 'json',
                url: "/DesktopModules/MVC/LH.AssociationAdmin/Association/SelectAssociation/xxx",
                method: "Post",
                data: {
                    AssociationId: $(this).val()
                },
                headers: {
                    "ModuleId": moduleId,
                    "TabId": tabId,
                    "RequestVerificationToken": rvtoken
                },...
/xxx只是一个与{IMTAssociationAdminId}关联的伪参数