2009-10-11 129 views
0

我剛開始玩MVC,並且遇到了障礙。我使用OpenID在每個頁面的標題上使用局部視圖作爲用戶登錄彈出窗口。當用戶點擊提供者(類似於stackoverflow)時,它進行身份驗證,然後返回到調用頁面或重定向到註冊頁面。該代碼完美工作在Firefox和Chrome下,但在IE中彈出。控制器中的「提供者」參數始終以空值發送。是否有某種錯誤涉及在IE中發佈輸入名稱/值或者我做錯了什麼?Internet Explorer發佈數據錯誤 - ASP.NET MVC

這是我的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 
} 

回答

3

嗯,它看起來像IE,這一次,是唯一的瀏覽器中正確遵循HTML規範根據this post.

HTML規範只需要 表示x,y座標點擊圖片 提交按鈕被髮送到 網絡服務器。 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; 
}