C# URL路由未正确呈现调用的页面

C# URL路由未正确呈现调用的页面,c#,html,asp.net,url-routing,C#,Html,Asp.net,Url Routing,下面的普通Href正常工作并正确呈现被调用的页面,但是URL并没有隐藏 <asp:Repeater ID="rCompany" runat="server" DataSourceID="sdsCompany" > <ItemTemplate> <div class="col4" id="trip_third"> <a href="discover_detail.aspx?Companies_PKID=<%# Eval("Companies_PKID

下面的普通Href正常工作并正确呈现被调用的页面,但是URL并没有隐藏

<asp:Repeater ID="rCompany" runat="server" DataSourceID="sdsCompany" >
<ItemTemplate>
<div class="col4" id="trip_third">
<a href="discover_detail.aspx?Companies_PKID=<%# Eval("Companies_PKID").ToString() %>">    
    ....... 
</a>
</div>
</ItemTemplate>
</Repeater>
并将Href更改为

<a href="<%#GetRouteUrl("RouteForDiscover_Detail", new {Companies_PKID=Eval("Companies_PKID").ToString()})%>" >

    • 登录/退出 登录按钮


我认为您需要提供更多的代码,以便我们能够完全提供帮助,但我强烈感觉这是您的问题:

在第一个示例中,您使用querystring传递
公司的PKID
,因此我猜您的代码隐藏类似于:

if (!String.IsNullOrEmpty(Request.QueryString["Companies_PKID"]))
{
    string blah = (Request.QueryString["Companies_PKID"]).ToString();
}
现在,您需要以不同的方式获取值:

if (Page.RouteData.Values["Companies_PKID"] != null)
{
    string blah = Page.RouteData.Values["Companies_PKID"].ToString();
}
注意,您需要同时检查查询字符串和路由数据


您需要确保的另一件事是样式表等的路径是正确的。

由于请求的URL位于虚拟子目录(discover\u detail)中,因此您的所有相关引用现在都是错误的。您需要将对图像、样式表等的所有引用改为使用应用程序相对版本

不是唯一的,但这会让你更接近:

<link runat="server" rel="shortcut icon" type="image/x-icon" href="~/assets/images/favicon.ico" />
<link runat="server" href="~/css/bootstrap.min.css" rel="stylesheet" />
<link runat="server" href="~/css/master.css" rel="stylesheet" type="text/css" />
<script src="<% Page.ResolveClientUrl("~/js/scrolltopcontrol.js") %>" type="text/javascript"></script>
<script src="<% Page.ResolveClientUrl("~/js/modernizr.js") %>" type="text/javascript"></script>
<link runat="server" rel="stylesheet" href="~/css/flexslider.css" type="text/css" />
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<link runat="server" rel="stylesheet" href="~/css/ie.css">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no,maximum-scale=1">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js"></script>
<script src="<% Page.ResolveClientUrl("~/js/bootstrap.min.js") %>"></script>
<script src="<% Page.ResolveClientUrl("~/js/jquery.flexslider-min.js") %>" type="text/javascript"></script>


**编辑为手动解析应用程序相关URL

“页面呈现完全不正确”…您能展开吗?你到底看到了什么?什么是完全不正确的呢?HTML的页眉/页脚,图像没有显示,JS没有运行。整页都是模糊的。没有适当的渲染。我会在呼叫页面中遗漏什么吗?它是否应该以不同于普通Href的方式接收呼叫?路由定义是否应该是“discover_detail/{companys_PKID}”(缺少左尖括号)?@Miike——可能是这样,但可能性不大。在尝试调试时,我将旧Href硬编码到我知道不存在的公司PKID。HTML页眉/页脚显示正确。。。只是没有模板(正如预期的那样)。@AlsProtocol这取决于您的页面逻辑是否仅在查询字符串存在时才正确运行。。。我想另一件要检查的事情是,你的样式表也被正确引用了。在去掉所有引用任何东西的代码并只留下和之后,它仍然是FUBAR'd。这里发生了什么事?@AlsProtocol只是说是FUBARd没有描述问题,也没有告诉我们发生了什么。正如许多人已经说过的,你需要包含相关的代码。如果你在Fiddler中查找,浏览器在寻找什么URL,图像、javascript、,等等?@Amy——为了简单起见,我删除了所有对图像的引用,但仍然面临页面的不一致呈现,但MS SQL Server这是除了将所有对QueryString的引用更改为RouteValue之外的,因为您不再使用QueryString来传递值。QueryStringParameter将需要成为RouteValueParameter或等效的(我认为RouteValueParameter实际上不存在)。此外,在firefox中使用firebug进行调试,查看net选项卡将表明您的所有外部程序都会出现404 not found错误,或者使用fiddler2作为代理将表明同样的情况。通过Chrome,点击F12,然后选择网络选项卡,等等。我需要两种不同类型的用户的QueryString和RouteValue,因此代码后面的“if”语句您肯定可以将大部分内容隐藏在if语句后面,但是您可能想考虑使用URL重写来将旧的.ASPX调用发送到您的新格式,这样您就不必了。
if (Page.RouteData.Values["Companies_PKID"] != null)
{
    string blah = Page.RouteData.Values["Companies_PKID"].ToString();
}
<link runat="server" rel="shortcut icon" type="image/x-icon" href="~/assets/images/favicon.ico" />
<link runat="server" href="~/css/bootstrap.min.css" rel="stylesheet" />
<link runat="server" href="~/css/master.css" rel="stylesheet" type="text/css" />
<script src="<% Page.ResolveClientUrl("~/js/scrolltopcontrol.js") %>" type="text/javascript"></script>
<script src="<% Page.ResolveClientUrl("~/js/modernizr.js") %>" type="text/javascript"></script>
<link runat="server" rel="stylesheet" href="~/css/flexslider.css" type="text/css" />
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<link runat="server" rel="stylesheet" href="~/css/ie.css">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no,maximum-scale=1">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js"></script>
<script src="<% Page.ResolveClientUrl("~/js/bootstrap.min.js") %>"></script>
<script src="<% Page.ResolveClientUrl("~/js/jquery.flexslider-min.js") %>" type="text/javascript"></script>