C# 重定向时添加了路由字符串。响应但未分配给[RoutedData]字符串

C# 重定向时添加了路由字符串。响应但未分配给[RoutedData]字符串,c#,asp.net,webforms,webforms-routing,C#,Asp.net,Webforms,Webforms Routing,我有一个按钮,它使用一个代码隐藏方法来做一些事情。完成后,我有一个Redirect.Response,它应该转发用户并使用route数据字符串来获取与之匹配的所有产品 相反,它将用户正确地转发到目标URL([domain]/ScreeningDateTime/a38eceeb-5753-4156-ae2d-6a74cf7fef1e-64722426),但显示该表中的所有结果,而不仅仅是与RoutedData字符串匹配的结果 我想指出几件事: 我可以输入[domain]/ScreeningDate

我有一个按钮,它使用一个代码隐藏方法来做一些事情。完成后,我有一个Redirect.Response,它应该转发用户并使用route数据字符串来获取与之匹配的所有产品

相反,它将用户正确地转发到目标URL([domain]/ScreeningDateTime/a38eceeb-5753-4156-ae2d-6a74cf7fef1e-64722426),但显示该表中的所有结果,而不仅仅是与RoutedData字符串匹配的结果

我想指出几件事: 我可以输入[domain]/ScreeningDateTime?id=1并使其正常工作。 在调试(VS2013.3Pro)中,如果我锁定了InternalId,它会在初始页面上正确显示字符串“a38eceeb-5753-4156-ae2d-6a74cf7fef1e-64722426”。在ScreeningDateTime页面上,它没有

为简洁起见,代码中删除了一些内容(我已经测试了它,因为它显示了相同的结果):

从第一页开始

Response.Redirect(
            GetRouteUrl("ScreeningsByDateTimeRoute", new { internalId = InternalId }));
来自Global.asax

    void RegisterCustomRoutes(RouteCollection routes)
    {
        routes.MapPageRoute(
        "ScreeningsByDateTimeRoute",
        "ScreeningDateTime/{internalId}",
        "~/ScreeningDateTime.aspx"
        );

        *More Routes*
从ScreeningDateTime代码隐藏(目标页面):

公共IQueryable GetProducts(
[QueryString(“id”)]int?id,
[RouteData]字符串内部ID)
{
var_db=new ProductContext();
IQueryable查询=_db.Screenings;
如果(id.HasValue&&id>0)
{
query=query.Where(p=>p.ScreeningID==id);
}
如果(!String.IsNullOrEmpty(internalId))
{
query=query.Where(p=>String.Compare(p.InternalId,InternalId)==0);
}
返回查询;
}
如果你一直在寻找解决办法,时间比我想承认的要长。任何帮助都将不胜感激。:)


谢谢

我一直在
.aspx.cs
中以
Page.RouteData.Values[variableName]
的形式访问路由变量。请尝试以下代码:

public IQueryable<Screening> GetProducts()
{
    var _db = new ProductContext();
    IQueryable<Screening> query = _db.Screenings;

    if (!String.IsNullOrEmpty(Request.QueryString["id"]))
    {
        query = query.Where(p => p.ScreeningID == Request.QueryString["id"]);
    }
    else if (Page.RouteData.Values["internalId"] != null && !String.IsNullOrEmpty(Page.RouteData.Values["internalId"] as string))
    {
        query = query.Where(p => p.InternalId == Page.RouteData.Values["internalId"].ToString());
    }
    return query;
}

谢谢你的回复。我试过了,但没有成功。InternalId值仍显示为null。这似乎是一个问题,我的路线,但我不确定。它被路由到正确的URL,但一旦到达,页面就不会将“ScreeningDateTime/{InternalId}”中的“{InternalId}”部分分配给路由数据。如果该函数位于不同的类/库中,您是否可以尝试将该函数移动到页面中,看看它是否有效?@ZombieBunnies添加了一个关于潜在路由/url冲突的更新。
public IQueryable<Screening> GetProducts()
{
    var _db = new ProductContext();
    IQueryable<Screening> query = _db.Screenings;

    if (!String.IsNullOrEmpty(Request.QueryString["id"]))
    {
        query = query.Where(p => p.ScreeningID == Request.QueryString["id"]);
    }
    else if (Page.RouteData.Values["internalId"] != null && !String.IsNullOrEmpty(Page.RouteData.Values["internalId"] as string))
    {
        query = query.Where(p => p.InternalId == Page.RouteData.Values["internalId"].ToString());
    }
    return query;
}
routes.MapPageRoute(
        "ScreeningsByDateTimeRoute",
        "ScreeningDateTimeIntId/{internalId}",
        "~/ScreeningDateTime.aspx"
        );