Ошибка данных поста в Internet Explorer - ASP.NET MVC - PullRequest
0 голосов
/ 12 октября 2009

Я только начал играть с MVC и наткнулся на контрольно-пропускной пункт. Я использую частичное представление в качестве всплывающей подсказки для входа пользователя в систему на заголовке каждой страницы с использованием OpenID. Когда пользователь нажимает на провайдера (аналогично stackoverflow), он аутентифицируется и затем либо возвращается на вызывающую страницу, либо перенаправляет на страницу регистрации. Код работает безупречно под Firefox и Chrome, но взрывается в IE. Параметр «provider» в контроллере всегда отправляется как ноль. Есть ли какая-то ошибка, связанная с публикацией входных имен / значений в IE, или я делаю что-то не так?

Вот как выглядит мой частичный вид openid:

<%  using (Html.BeginForm("Authenticate", "Membership", new { ReturnUrl = Request.Url }, FormMethod.Post))
{ 
    if (!Page.User.Identity.IsAuthenticated)
       { %>
            <div class="openidProviders">
                Log in or join using one of these OpenID providers:
                <div class="large buttons">                 
                    <div class="provider"><div><%= Html.SubmitImage("provider", "/Content/common/images/google.gif", new { value = "Google" })%></div></div>
                    <div class="provider"><div><%= Html.SubmitImage("provider", "/Content/common/images/Yahoo.gif", new { value = "Yahoo" })%></div></div>
                    <div class="provider"><div><%= Html.SubmitImage("provider", "/Content/common/images/AOL.gif", new { value = "AOL" })%></div></div>
                    <div class="provider"><div><%= Html.SubmitImage("provider", "/Content/common/images/OpenId.gif", new { value = "OpenId" })%></div></div>
                </div>                      
            </div>                                          
    <% }       
}
%>

И логика контроллера здесь:

[AcceptVerbs(HttpVerbs.Post), ValidateInput(false)]        
public void Authenticate(string provider, string ReturnUrl)
{
    // Figure out provider endpoint
    // Authentication function calls here
}

1 Ответ

3 голосов
/ 12 октября 2009

Что ж, похоже, IE на этот раз является единственным браузером, правильно следующим спецификации HTML в соответствии с этой записью.

Спецификация HTML требует только что х, у координаты, где изображение была нажата кнопка «Отправить» веб-сервер. IE следует за Спецификация. Браузеры, которые отправляют параметр value = "..." делает их собственная вещь вне HTML спецификация.

В основном мне нужно использовать ввод данных вместо SubmitImage, а затем соответствующим образом стилизовать фон кнопки. Не оптимальное решение, но, по крайней мере, оно работает. Вот как выглядит окончательное решение. Если кто-нибудь знает способ заставить SubmitImage работать должным образом, дайте мне знать.

Замените кнопки выше на те, которые выглядят так:

<input type="submit" value="Google" class="google_OpenID" name="provider" />

И класс CSS:

.google_OpenID
{
    background-image: url(/Content/common/images/google.gif); 
    width:75px; 
    cursor:pointer; 
    color:transparent; 
    height:35px; 
    border:none;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...