C# 重定向时添加了路由字符串。响应但未分配给[RoutedData]字符串
我有一个按钮,它使用一个代码隐藏方法来做一些事情。完成后,我有一个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页面上,它没有 为简洁起见,代码中删除了一些内容(我已经测试了它,因为它显示了相同的结果): 从第一页开始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
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"
);