【发布时间】: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