При использовании такой формы:
<h2>
<%:Model.EulaTitle %>
</h2>
<p>
<%=Model.EulaHtml %>
</p>
<a name="errors"></a>
<%:Html.ValidationSummary()%>
<div style="text-align:center;">
<% using (Html.BeginForm())
{ %>
<%:Html.HiddenFor(model => model.SourceUrl)%>
<%:Html.HiddenFor(model => model.EulaId)%>
<a name="accept"></a>
<div style="text-align:center;">
<%:Html.CheckBoxFor(model => model.Accepted)%>
<%:Html.LabelFor(model => model.Accepted)%>
</div>
<input type="submit" value="Submit">
<% } %>
</div>
Мне нужно, чтобы страница прокручивалась до #errors
при публикации. Model.EulaHtml
содержит текст EULA некоторой длины, и я бы предпочел, чтобы пользователям не приходилось вручную прокручивать страницу вниз, чтобы увидеть сообщение об ошибке, если они публикуют страницу без принятия соглашения.
Если контроллер обнаруживает ModelState.IsValid
на Post, он перенаправляет на другую страницу. Если нет, мне нужно остаться на этой странице, но выделите тег привязки закладки #errors
.
Я думал только о добавлении «#errors» в конец URL-адреса в действии формы, но я получаю ошибки по линии a potentially dangerous .... ('%')
. Возможно, я неправильно кодирую метку хеша. Кто-нибудь еще должен был иметь дело с этим? Мы имеем дело с довольно жесткими требованиями к совместимости браузера (IE6 + и все остальное под солнцем), поэтому я стараюсь по возможности избегать использования JavaScript.
Обновление
Я получаю ошибку:
A potentially dangerous Request.Path value was detected from the client (%).
Я изменил Html.BeginForm()
вызов
<% using (Html.BeginForm(new { @action="#errors" }))
{ %>
И полученный URL-адрес:
http://..../TheControllerName/Eula/%2523errors/
Я также заметил, что несколько параметров queryString, которые были переданы, исчезают, когда я таким образом устанавливаю атрибут action
. (Не удивительно, но для меня это не очевидно сразу)