DotNetNuke MVC模块将数据传递到不同的路由

时间:2017-01-31 00:07:50

标签: dotnetnuke

我正在尝试将数据传递到其他路线。我使用表单操作和Url.Action,但这不起作用。它甚至没有路由到另一个视图。当我将锚标记href与Url.Action一起使用时,它可以工作,但是如何将数据从一个Controller方法传递到同一个Controller但是使用不同的方法。

2 个答案:

答案 0 :(得分:0)

我在Github上有一个DNN MVC模块示例供您参考。 https://github.com/DotNetNuclear/DnnRestaurantMenu/blob/master/RestaurantMenu.MVC。您可以通过在Releases链接下找到安装包来轻松安装它。

如果查看默认/索引视图,则会打开一个链接以打开“编辑”视图。如果传递了项目ID,它会将数据加载到编辑表单中,否则,如果没有项目ID,则会将其视为新的(添加)项目。

所以在我的View.cshtml中,我使用DNN的Url.Action助手来形成按钮的href。 (https://github.com/DotNetNuclear/DnnRestaurantMenu/blob/master/RestaurantMenu.MVC/Views/Menu/Index.cshtml

<a class="btn btn-default" href="@Url.Action("Edit", "Menu", new {ctl = "Edit", itemId = item.MenuItemId})">@Dnn.LocalizeString("EditItem")</a> 

第一个参数是模块控制键/动作。第二个是控制器名称。在Url.Action的第3个参数中,我们传递控件类型,然后传递任意数量的其他查询字符串参数。在这种情况下,视图模型中的项目ID。

在我的MenuController的Edit()动作中,我可以使用该项ID参数从数据库中查找项目模型,然后返回编辑视图。

public ActionResult Edit(int itemId = -1)
{
    ...

    if (itemId > 0)
    {
        item = _menuController.GetItem(itemId, CurrentModuleId);
    }

    ...
}

答案 1 :(得分:0)

我无所不能的唯一方法就是创建一个routerconfig.cs:

$.ajax({
        url: `/DesktopModules/MVC/CW.GridTest/IMMUser/EditUserById/userid/${myUserId}`,
        method: "Post",
        headers: {
            "ModuleId": moduleId,
            "TabId": tabId,
            "RequestVerificationToken": rvtoken,
            "userId": id //if we were to specify Edit as our url, then we would need this since Edit() takes no parameters and instead, looks in the header for it's data.
        }

然后,例如,在我的index.cshtml中,可以这样做:

/DesktopModules/MVC/CW.GridTest/IMMUser/EditUserById/${myUserId}

/DesktopModules/MVC/CW.GridTest/IMMUser/AssignItemToUser/userid/${myUserId}/itemid/${myItemId}

ASP.NET