Ссылка на местоположение на странице (#id) через механизмы ASP.NET MVC? - PullRequest
0 голосов
/ 15 января 2010

Мой пример:

У меня есть View, представляющий набор тегов div, содержимое которых заполняется из модели данных.

[Несколько из них, с разным location_id, естественно]

<div>
    <a name="location_id"></a>
    Content
</div>

Теперь у меня есть форма [в своем собственном представлении], которая представляет контент, который добавляет еще одну запись в модель данных. После создания и отправки записи я перенаправляю обратно на Action, который возвращает View с перечнем <div>.

Мой вызов:

Я бы хотел, чтобы страница сфокусировалась на только что созданном блоке <div>. В идеале я хотел бы сделать это без использования javascript, - я хотел бы использовать #location_id, заканчивающийся на URL. Вот так: http://site/Controller/Action/Id#12 (или что-то в этом роде).

Кто-нибудь получил какие-либо советы о том, как это сделать?

Редактировать: Я не могу использовать метод контроллера Redirect (или что-либо, включающее необработанный URL-адрес. Его необходимо направить либо через механизмы Controller/Action или Route).

Ответы [ 4 ]

1 голос
/ 10 июня 2011

В MVC 3 можно использовать аргумент фрагмента в этой функции перегрузки Html.ActionLink:

публичная статическая MvcHtmlString ActionLink ( этот HtmlHelper htmlHelper, строка linkText, строка actionName, строка controllerName, строковый протокол, строка hostName, фрагмент строки , Объект routeValues, Объект htmlAttributes )

http://msdn.microsoft.com/en-us/library/dd460522.aspx

1 голос
/ 15 января 2010

При возвращении из действия вы, вероятно, используете RedirectToAction (), вы можете передать значения маршрута.

Вы можете иметь такой маршрут

routes.MapRoute(
"DisplayDivsRoute",
"{controller}/{action}/{focusedDivId}", // URL with parameters
new {controller = "Content", action = "Display", focusedDivId = "1"}, null );

Когда в вашем действии Post (когда вы сохраняете новый объект контента), вы можете

return RedirectToAction()

НТН

1 голос
/ 15 января 2010

Извините за трату времени всех ...

Я только что вспомнил, что вы можете разделять сегменты маршрута другими символьными литералами, кроме '/',

поэтому естественно, что я могу построить маршрут следующим образом:

routes.MapRoute(
"MyRoute",
"{controller}/{action}/{id}#{locid}",
 new { ... });

Проблема решена.

0 голосов
/ 15 января 2010

Вы в значительной степени ответили на свой вопрос. Перенаправьте на URL-адрес, похожий на тот, который вы указали (http://site/Controller/Action/Id#12),, и создайте привязочный тег в своем представлении с атрибутом имени непосредственно перед записью, к которой вы хотите перейти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...