C# MVC中的ActionLink问题
我怎么能写呢C# MVC中的ActionLink问题,c#,asp.net-mvc,C#,Asp.net Mvc,我怎么能写呢 Response.Write("<a href='/someurl'>Some Text</a>"); 我之所以关注它,是因为我正在编写分页ViewUserControl。在控件中,我希望它显示页码、下一页和上一页等 当我使用以下代码时 Response.Write(Html.ActionLink(page.ToString(), HttpContext.Current.Request.RawUrl, new { page = page })); 链接写
Response.Write("<a href='/someurl'>Some Text</a>");
我之所以关注它,是因为我正在编写分页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
的操作
如您所见,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 ) %>
克里斯
通过阅读你上面的“澄清”和评论,我认为你把事情弄得太复杂了
行与行之间最清楚的一点是,您需要某种程度上可重用的小部件来显示可分页的客户列表
那么,为什么不简单地:
- 创建
,并创建CustomerController
,作为显示客户列表的操作索引()
- 将路径
和“客户”
映射到“客户/页面{page}”
CustomerController.Index()
- 使用
在需要呈现客户列表的任何地方Html.RenderAction(“Index”,“Customer”,new{page=page})
HttpContext.Current.Request.RawUrl
内容,您必须决定:要么使用ASP.NET路由,要么自己构建所有路由。因为这些技术有些相互排斥
顺便说一句,关于你到底想要实现什么的更多细节将有助于我们帮助你。你的问题非常不清楚。您试图在哪里执行此操作?您希望在哪里渲染此链接?你为什么不想使用ActionLink?为什么要使用回复。写?谢谢-我更新了问题,并说明了原因!现在您已经更新了问题,您的意思是您正在编写一个视图控件。你这到底是什么意思?它是一个从UserControl派生的类吗?我只使用html而不是helper,因为html代码很容易阅读,也很容易知道我在做什么。我不认为这比
更可取。我也是,但如果你不喜欢传递html属性或者你想让它看起来更像html,它会给你URL。我通常使用ActionLink
,但每个人都有自己的。@hunter,我认为OP需要解释他想做什么。还有你添加的第三个例子,Response.Write
,真是一个标签汤,我没有文字来描述它:-)@Darin,同意。离开他的头衔,我想这就是他所要求的。@Chris——你试过从RawUrl上去掉斜线吗RawUrl.Trim(“/”)
@Chris-问题可能是在需要id参数的路由中没有id参数。尝试为没有id的寻呼机创建另一个路由(我将用一个示例更新我的问题),然后使用RouteLink扩展名按名称引用它。它应该位于默认路由之后。
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 });