【问题标题】:DotNetNuke MVC routing conflictDotNetNuke MVC 路由冲突
【发布时间】:2018-08-18 17:37:53
【问题描述】:

我有许多 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”

我尝试将我的路由转换为 IServiceRouterMapper:

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 和其他一些方法。

我如何使所有这些工作?

【问题讨论】:

    标签: model-view-controller routing dotnetnuke


    【解决方案1】:

    好的。这是路线冲突的问题。我的模块占了它。没有。因此,我在每个模块中创建了一个不会与第三方软件冲突的路由。对白衣:

    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} 关联的虚拟参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 2016-05-26
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      相关资源
      最近更新 更多