Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC中的ActionLink问题_C#_Asp.net Mvc - Fatal编程技术网

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})
    在需要呈现客户列表的任何地方
按照这种方式,所有繁重的工作(包括URL解析)都将由基础设施完成,您将获得“可重用小部件”或“控件”

对于前面提到的
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 });