0

第一个 MVC4 项目,我已经达到了缓冲区...

我希望能够引用我的网站页面;

菜单/子菜单/文档/ID

如果 ID 值是可选的,并且最后标记了任何其他内容,模型将处理文档部分,该部分将作为文本,例如,

HOME/欢迎光临/欢迎光临本店

所以我设置了一条路线(只有一条路线)

routes.MapRoute(
    name: "Default",
    url: "{menu}/{submenu}/{document}/{id}",
    defaults: new {
        controller = "Page", 
        action= "Data", 
        menu = "",
        submenu = "",
        document = "", 
        id = ""}

我有一个控制器;

public class PageController : Controller
{

    // Default view option for documents


    public ActionResult Data(string menu, string submenu, string document, string parameters)
    {


        // Set the View to use rather than it default;
        string thisView = "Data";

        return View(thisView);
    }

}

我们有一个引用 _MenuPartial.cshtml 文件的 _Layout.cshtml 文件

@model MyNameSpace.Models.PageModel
<ul>
    @foreach (var item in Model.Menus.MainMenu)
    {
        <li>@Html.ActionLink(item.Label, "Page", "Data", new
           {
               menu = "MENU",
               submenu = "SUBMENU"
           },
           null
           )
        </li>
    }
</ul>

以上所有内容都使用正确的文本等动态地写出我的主菜单。

但是,当我单击一个标签时,路由似乎很高兴地映射到 PageControllers Data 函数,但字符串菜单、字符串子菜单、字符串文档、字符串参数的值为“”或 null。

如果我修改 URL,那么它们会正确传递。

我确信这只是对我应该做的事情的误解,我希望一旦有好心人发现它,我就会离开并逃跑!

谢谢安迪

4

1 回答 1

2

尝试UrlParameter.Optional在路由中为文档和 ID 提供默认值,并在操作中为文档和 ID 参数提供默认值 "" ( string document = "")。这应该允许路由将操作链接路由数据与路由相协调。

于 2013-04-03T09:00:52.687 回答