у меня есть проект, в котором мне нужно создать специальную маршрутизацию, как я могу создать свое собственное правило?

#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. если вы упомянули мой комментарий, я уже делаю то же самое. спасибо, но это не сработало.