#c# #asp.net-mvc #asp.net-mvc-3 #routing
#c# #asp.net-mvc #asp.net-mvc-3 #маршруты
Вопрос:
на моем собственном сайте мне нужно, чтобы страница была известна по #topic.
это должно выглядеть как
mywebsite.com#google [возможно ли, что мне нужно передать google в качестве параметра] ИЛИ mywebsite.com/#google [если первое невозможно выполнить, то как я могу это использовать]
как я могу применить это на своем веб-сайте. то, что мне нужно для этого
если кто-нибудь откроет сайт mywebsite.com#google, чтобы контент генерировался динамически через [передача google в качестве параметра]
кто-нибудь может показать, как я могу создать маршрутизацию для этого
Комментарии:
1. это будет сложно, поскольку # используется для обозначения «фрагмента» или элемента с именем привязки на странице. почему бы не использовать «?»?
2. знак вопроса означает что-то вроде question, а # означает look on detail, поэтому я предпочитаю использовать #. можете ли вы показать какую-нибудь альтернативу для этого
3. да, как я написал в комментарии, вы можете urlencode ваши ссылки на mywebsite.com#google
4. @Moby: Похоже, вы хотите изменить значение? и # в URL-адресах. Не сопротивляйтесь tools.ietf.org/html/rfc3986 , примите это. Использовать? вместо # и ваша проблема внезапно исчезнет.
5. @Moby: Поскольку вам не нравится вопросительный знак и # не может быть использовано, почему бы вам просто не использовать / как все остальные (даже Google)? И знаете что? Это будет работать в Asp.net Также MVC. И кстати: ? и URL-адреса не интерпретируются как вопросы, как вы (как человек) их интерпретируете или эмоционально ощущаете.
Ответ №1:
Вы не можете использовать маршрутизацию для этого. Значение, которое следует за знаком # в URL-адресе, НИКОГДА не отправляется на сервер клиентским браузером. Так, например, если вы запрашиваете, http://example.com/someaction#google
сервер никогда не сможет получить значение google
просто потому, что браузер никогда его не отправляет. Единственный способ — использовать javascript ( window.location.hash
) и, возможно, отправить AJAX-запрос на сервер, переписав URL : http://example.com/someaction?param=google
Комментарии:
1. да, я обнаружил, что chrome делает их / #google вместо #google. есть ли какие-либо альтернативные варианты, которые могут помочь мне сделать это.
2. @Moby, нет, это ничего не меняет. Вам нужен javascript, и это единственный способ. Не нужно тратить свое время на маршрутизацию.
3. если вы измените URL-адрес на #, он отправится на сервер, но я не знаю, поможет ли это
4. @comeau_ictx, да, конечно, но это изменит URL. Это больше не фрагмент, который был нужен OP.
5. возможно, но трудно понять (по крайней мере, для меня), чего он действительно хочет!
Ответ №2:
У вас есть таблица маршрутов в Global.asax. Добавьте это в метод RegisterRoutes. Я не уверен, что это сработает, поскольку я не тестировал, но это может дать вам хорошее начало.
routes.MapRoute(
"RouteWithSharp",
"#{page}",
new { controller = "Home", action = "Index", page = "" } // Parameter defaults
);
Комментарии:
1. если вы упомянули мой комментарий, я уже делаю то же самое. спасибо, но это не сработало.