MVC中的jQuery UI模式对话框

时间:2012-11-23 01:09:06

标签: asp.net-mvc jquery-ui jquery-ui-dialog

请原谅我这个简单化的问题,但我很难理解这个问题。我有一个View(.cshtml),其中包含以下内容(按此sample):

<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>

基本上,无论何时打开,View都会在jQuery UI对话框中加载,也就是说,View自身负责将其自己的内容放在jQuery UI对话框中。我这样做了,以便我可以覆盖登录的OnAuthorzation()事件,并在需要登录时将用户重定向到弹出窗口。我有3个问题:

1。当表单发回服务器时,如何显示加载动画(.gif)?用这种方法?我知道如果我使用Ajax.BeginForm我可以指定一个UpdateTargetId,它可以用作在回发期间加载动画的区域,但是如何通过这种方法实现这种效果?

2. 我如何在上面的表单帖子中附加和处理success事件?即当表单回发到Login控制器的Home操作时。

3. 我看到至少有3种或4种不同的方法在MVC中显示对话框。这样做的正确方法是什么?我上面发布的方法是否被认为是良好/ mvc友好的做法,如果不是你推荐的是什么?

1 个答案:

答案 0 :(得分: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的对话框内容。