[英]Issue with ActionLink in MVC
我该怎么写
Response.Write("<a href='/someurl'>Some Text</a>");
代替
Response.Write(Html.ActionLink(...));
我这样做的原因是因为我正在编写分页ViewUserControl。 在控件中,我希望它显示页码,下一页和上一页等。
当我使用以下代码
Response.Write(Html.ActionLink(page.ToString(), HttpContext.Current.Request.RawUrl, new { page = page }));
链接写为http://localhost:61293/customers/customers/System.Web.Mvc.UrlParameter/page2
,这显然是错误的。
在此示例中, HttpContext.Current.Request.RawUrl == "/customers/"
。 我本来希望结果Url是/customers/page2
,而不是实际写出的内容。
我的路线设置如下:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}/page{page}", // URL with parameters
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional,
page = UrlParameter.Optional
} // Parameter defaults
);
谁能阐明一些想法?
基于您的更新,您不应该将HttpContext.Current.Request.RawUrl
用作ActionLink
的操作。
http://msdn.microsoft.com/zh-CN/library/dd505040(v=VS.90).aspx
public static string ActionLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
object routeValues
)
如您所见, HttpContext.Current.Request.RawUrl
与您的任何操作都不匹配。 尝试写作:
Html.ActionLink(page.ToString(),
"TheNameOfTheActionMethod",
new { page = page });
我认为您的路由设置不正确-可能是其中一条路由的错误位置中的参数。 我之所以这样说,是因为似乎正在调用UrlParameter类本身的ToString方法,从而导致输出该类的名称。
分页路由(来自注释)-假设“列表”操作为“索引”,并且您不希望索引操作出现在路由中。 请注意,它从当前请求继承了控制器,并且由于操作是按照惯例进行的,因此您无需提供它。 完全未经测试。
routes.MapRoute(
"Pager", // Route name
"{controller}/page{page}", // URL with parameters
new
{
controller = "Home",
action = "Index",
page = UrlParameter.Optional
} // Parameter defaults
);
用作:
<%= Html.RouteLink( page, "Pager", new { page = page }, null ) %>
Url.Action("ActionMethodName", new { page = i });
克里斯,
通过阅读上面的“说明”和评论,我认为您只是使周围的事情变得过于复杂。
在行与行之间可以识别的最清楚的事情是,您需要某种可重用的小部件,以显示您的客户分页列表。
那么,为什么不简单地:
CustomerController
和一个Index()
作为显示客户列表的操作 "customers"
和"customers/page{page}"
路由到CustomerController.Index()
Html.RenderAction("Index", "Customer", new {page = page})
。 按照这种方式,基础架构将为您完成所有繁重的工作(包括URL解析),您将获得“可重用的小部件”或“控件”。
至于提到的HttpContext.Current.Request.RawUrl
东西-您必须决定:您是要使用ASP.NET 路由还是自己构建所有路由。 因为这些技术在某种程度上相互排斥。
PS无论如何,关于您要实现的目标的更多详细信息将帮助我们为您提供帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.