0

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

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

我想注意几点:我可以输入 [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 代码(目标页面):

    public IQueryable<Screening> GetProducts(
        [QueryString("id")] int? id,
        [RouteData] string internalId)
    {
        var _db = new ProductContext();
        IQueryable<Screening> query = _db.Screenings;

        if (id.HasValue && id>0)
        {
            query = query.Where(p => p.ScreeningID == id);
        }

        if (!String.IsNullOrEmpty(internalId))
        {
            query = query.Where(p =>String.Compare(p.InternalId,internalId) == 0);
        }
        return query;
    }

如果寻找修复的时间比我想承认的要长。任何帮助将不胜感激。:)

谢谢

4

1 回答 1

0

我总是在.aspx.csas中访问路由变量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;
}

更新:

我想知道您是否正在使用 FriendlyURLs 或 URL 重写之类的东西,这会导致/ScreeningDateTime.aspx和之间发生冲突/ScreeningDateTime/。尝试将路由 URL 重命名为其他名称,例如:

routes.MapPageRoute(
        "ScreeningsByDateTimeRoute",
        "ScreeningDateTimeIntId/{internalId}",
        "~/ScreeningDateTime.aspx"
        );
于 2014-09-20T21:14:47.837 回答