2012-11-23 121 views
2

對不起,我想了解一個簡單的問題,但是我很難理解這一點。我有以下內容(每本sample)視圖(.cshtml):MVC中的jQuery UI模式對話框

<div id='dlgLogin'> 
    <h1>Log in</h1> 
    <table> 
     <tr> 
      <td>Username:</td> 
      <td>@Html.TextBox("username")</td> 
     </tr> 
     <tr> 
      <td>Password:</td> 
      <td>@Html.Password("password")</td> 
     </tr> 
    </table> 
</div> 
<script type="text/javascript"> 
    $(function() { 
     $("#dlgLogin").dialog({ 
      modal: true, 
      autoOpen: true, 
      resizable: false, 
      buttons: { 
       Login: function() { 
        // perform login 
        $.post("@Url.Action("Login", "Home")", 
        { 
         username: $('#username').val(), 
         password: $('#password').val() 
        }, 
        function(data, status, xhr) { 
         if(data.Success){ 
          alert('great'); // do something 
          $('#dlgLogin').dialog("close"); 
          $('#divLoginButton').load("@Url.Action("GetLoginButton", "Home")"); 
         } else { 
          // do something else 
         } 
        }); 
       }, 
       Cancel: function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 
    }); 
</script> 

基本上查看總會在一個jQuery用戶界面對話框加載每當它打開,也就是說,它的景觀本身的責任將其自己的內容放置在jQuery UI對話框中。我已經做到了這一點,這樣我可以覆蓋OnAuthorzation()事件的我的登錄和用戶重定向到一個彈出時被要求他們登錄我有3個問題:

我將如何顯示一個加載動畫(一個.gif)當表單被髮回服務器時?採用這種方法?我知道,如果我使用了Ajax.BeginForm,我可能指定了UpdateTargetId,這將在回發期間用作加載動畫的區域,但是如何使用此方法實現該效果?

2.我將如何附加並處理success事件到上面的表單郵件?即當表格被重新發送到Home控制器的Login動作。

3.我已經看到至少有3種或4種不同的方法來在MVC中顯示對話框。什麼是正確的方法來做到這一點?我上面發佈的方法是否被認爲是良好的/ mvc友好的練習,如果不是,你推薦什麼?

回答

1

1當表單被髮送回服務器時,如何顯示加載動畫(.gif)?

看看ajaxSend

<div id="loader"></div> 

$("#loader").bind("ajaxSend", function() { 
    $(this).show(); 
}).bind("ajaxStop", function() { 
    $(this).hide(); 
}).bind("ajaxError", function() { 
    $(this).hide(); 
}); 

2我怎麼會重視並處理成功事件上面的表格後?

我不明白你在問什麼。你已經附加了一個匿名函數來處理你的示例代碼中的服務器的帖子。

3我已經看到至少有3種或4種不同的方法來在MVC中顯示對話框。什麼是正確的方法來做到這一點?

有顯示一個對話框,沒有最佳方式。 您可以使用您展示的方法將對話內容加載到頁面中,但我會將style="display: none;"添加到對話框div。另一種方法是在打開對話框時從部分視圖中加載帶有ajax的對話內容。

+0

是的,'ajaxSend'就是我要找的,謝謝。是的,你是對的,我發佈的樣本處理回調本身,所以我的第二個問題是廢話(我在凌晨4點發布)。你可以[看看這個](http://ricardocovo.com/2012/04/06/asp-mvc3-editing-records-with-jqueryui-dialogs-and-ajaxforms-razor-version/)並給我對此有何意見?我真的很喜歡它顯示對話框的方式,允許你在父頁面上做一些事情(在這種情況下顯示twitter這樣的消息)。 –

+0

是的,這基本上是我建議的第二種方法:將內容作爲部分視圖加載到對話框中。與masterpage的交互是通過返回一個JSONResult到編輯/發佈操作並擺弄一些javascript來完成的。 – Jan