2010-02-14 61 views
0

這裏是MVC的新手,我希望通過將它放在主頁面上讓登錄框在整個站點的jQuery對話框中工作。ASP.NET MVC 2 jquery對話框回發問題

我都包裹着一個對話框div的,logOn.aspx形式,並添加一個按鈕,打開對話框和一些JQ

<button id="show-sign-in">Sign In</button> 
<script type="text/javascript"> 
$(function() { 
$("#dialog").dialog({ 
bgiframe: true, 
autoOpen: false, 
modal: true 
}); 
$('#show-sign-in').click(function() { 
$('#dialog').dialog('open'); 
}); 
</script> 
<div id="dialog" title="User Login">...</div> 

問題:

  1. 如果我包括在網頁中掌握RenderPartial,控制器的ActionResult將不會捕獲提交,除非網址中有/ Account。

    Html.RenderPartial(「〜/ Views/Account/LogOn.aspx」);

  2. 如果我將它與Ajax請求一起使用(下面),則提交會很好,但是如果登錄嘗試無效,則頁面會重定向到實際的LogOn頁面(我想將它們返回到對話框)。

    <script type="text/javascript"> 
    $(document).ready(function() { 
        $.ajax({ 
         url: "/Account/LogOn", 
         cache: false, 
         success: function (html) { 
          $("#logindisplay").append(html); 
         } 
        }); 
    });</script> 
    

底線,這是我做了很多,在網頁表單ASCX,我覺得這惱人去通過Ajax獲得很多的JS做同樣的事情,我是完全接近這一錯誤?有任何想法嗎?

回答

0

我很難理解你想要做什麼,但如果你需要的是一個登錄模式對話框,那麼它應該工作正常,如果你添加一些querystring參數到你的AJAX GET和POST的就像「?模式=真」。因爲這就是你想要的 - 你希望你的登錄表單能夠傳統的工作,並通過模態對話框。當通過模態對話框工作時,它也應該回發到模態,例如/ Account/LogOn /?modal = true。

此外,當您通過使用ASP.NET窗體身份驗證登錄時,我認爲您不能無回發地執行此操作。所以,即使你使用模態對話框,在關閉它之後,仍然需要進行頁面刷新。

至少這是我目前的計劃是怎麼做的..

+0

讓我再次解釋設置和問題。我有一個ascx在我的主JQ對話框中打開onclick,它會在對話框中加載登錄表單(MVC自帶的表單),因此它在提交時會觸發帳戶控制器中的LogOn ActionResult。 我的問題是,無效登錄情況下的返回是一個View();這實際上是/ Account/LogOn頁面,我該如何改變它,以便原始頁面將在打開的對話框中加載(錯誤結果將顯示在ValidationSummary中)?在webforms中,我只是在窗體周圍放置了一個更新面板,但是除非我錯過了一些沒有局部頁面渲染的東西 – saarpa 2010-02-14 17:17:44

+0

RenderPartial和RenderAction可能有幫助.. – mare 2010-02-14 20:22:43

1

您是否嘗試過移動LogOn.aspx到共享文件夾?如果您希望跨多個控制器共享視圖,那麼這就是它應該在哪裏?如果你將它渲染爲一個部分,它也應該派生自ViewUserControl而不是默認的ViewPage。您可能還需要更新默認的BeginForm簽名,以指定它需要轉到帳戶控制器和登錄操作,因爲您不再直接從LogOn()操作本身渲染它。

構建此的一種方法是具有呈現您的部分(共享)登錄窗體(LogonForm.ascx)的LogOn視圖。當登錄請求通過AJAX請求進入時,只需將表單部分呈現。如果它來自正常請求,則呈現整個視圖。您的表單應指定它明確回傳到帳戶/登錄操作。