Строка маршрута добавлена в Redirect.Response, но не назначена строке [RouteData]
У меня есть кнопка, которая использует метод кода для выполнения вещи. После завершения у меня есть Redirect.Response, который должен переслать пользователя и использовать строку данных маршрута, чтобы получить все продукты, соответствующие ему.
Вместо этого он перенаправляет пользователя на целевой URL ([domain]/ScreeningDateTime/a38eceeb-5753-4156-ae2d-6a74cf7fef1e-64722426), но отображает все результаты из этой таблицы, а не только результаты, соответствующие строке RouteData.
Я хотел бы отметить несколько вещей: я могу ввести [домен]/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;
}
Если бы искал исправление дольше, чем я хотел бы признать. Любая помощь будет принята с благодарностью.:)
Спасибо
1 ответ
Я всегда обращался к переменным маршрута в .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;
}
ОБНОВИТЬ:
Мне интересно, если вы используете что-то вроде FriendlyURL или перезаписи URL, и это вызывает конфликт между /ScreeningDateTime.aspx
а также /ScreeningDateTime/
, Попробуйте переименовать URL-адрес маршрута во что-то еще, например:
routes.MapPageRoute(
"ScreeningsByDateTimeRoute",
"ScreeningDateTimeIntId/{internalId}",
"~/ScreeningDateTime.aspx"
);