Model view controller DotNetNuke MVC路由冲突
我有许多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)
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}关联的伪参数