0

我正在使用 MVC 3 并遇到问题。而不是像我预期的那样给 mydomain/mydirectory/item 我得到这个:

mydomain/mydirectory/list?animal=quack。

这是全球路线

//Default route mapping
routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new { controller = @"[^\.]*", action = @"[^\.]*" }
);

显示我如何构建链接的代码:

   <div id="main-content" title="AnimalBox" style="float:none;">
        <% Html.DataList(Model.PriceListAnimals).Columns(7).Item(item =>
                {
                    item.Template(galleryImage =>  
                    {%>
                        <div style="margin-left:20px; line-height:150%;">
                            <span><%= Html.ActionLink(galleryImage.AnimalName,"List",new { @animal = galleryImage.AnimalName }) %></span>
                        </div>  
                        <%  });
                }).Render(); %>
    </div>

有任何想法吗?

4

2 回答 2

0

Html.ActionLink 的重载是:

Html.ActionLink("linkText", "actionName", "controller", object routeValues, object HtmlAttributes)

根据您所说,mydirectory=控制器和List=操作,对吗?如果是这样,请尝试:

<%= Html.ActionLink(galleryImage.AnimalName, "List", "mydirectory", new { @id = galleryImage.AnimalName }, null) %>

这应该产生:

<a href="/mydirectory/list/quack">quack</a>
于 2012-07-25T02:09:12.673 回答
0

您必须为像您的实例这样的特殊情况路由定义一个路由。由于您将“动物”作为参数传递,因此您应该创建一个路由来处理该实例。在您的 global.aspx(默认路由上方)中,创建如下内容:

routes.MapRoute(
    "Animal", // A distinct Route name
    "{controller}/{action}/{animal}", // URL with parameters
    new { controller = "MyDirectory", action = "List"}
);

这将定义到动作列表上的 MyDirectory 控制器的路由,该路由具有非可选的动物参数。定义路由使您能够从 html 帮助程序和其他方法(重定向到操作等)生成干净的 URL。

于 2012-07-25T04:38:39.830 回答