zoukankan      html  css  js  c++  java
  • Ajax.BeginForm结合Jquery UI学习(附源代码)

    本文将带大家来学习一下Ajax.BeginForm与Jquery UI(Dialog)。

    题外话,Hmtl.BeginForm与Ajax.BeginForm的差别,用Html.BeginForm()来提交的话,相当于提交整个页面,而使用Ajax.BeginForm来提交的话,相当于用Ajax的方式来提交。用AJAX来提交,能实现异步的交互方式,从而实现局部页面的刷新,增强用户体验。

    关于Jquery UI,大家可以到官网下载所需要的脚本及样式文件。本文只介绍Jquery UI里面的Dialog,但是至少你还得下载四个脚本文件,分别勾上Core、Widget、Position和Dialog。下载完之后,把里面的一些样式、脚本文件及图像加载到我们新建的项目里面,这里面以MVC2(ASP.NET MVC2 Web Application)来作为实例说明。为了更方便大家来看到效果,我上传了源码,大家需要的话,可以通过此链接来进行下载。加载需要的Jquery UI的文件这部分我就不进行说明了,这里面有一点大家需要注意的,就是导入Jquery UI的脚本文件的时候,是有顺序之分的。大家可以按照Jquery UI的Sample一样来导入,具体我知道Core(jquery.ui.core.js)是必须放在其它三个脚本文件的前面,剩下的我没有具体去试试。

    讲到Ajax.BeginForm,这里又不得不说题外话,如果你想要使用到Ajax.BeginForm,你还得导入两个脚本文件,分别为:MicrosoftAjax.js和MicrosoftMvcAjax.js,当然这两个的导入也是有顺序要求,要先导入MicrosoftAjax.js,然后再导入MicrosoftMvcAjax.js,不然也是会报脚本错误。不过在MVC2的工程里面,这些脚本都已经集成到 工程目录/Scripts目录里面了,所以你只需要做的是导入它们就可以了。当然,上面的所有脚本都离不开Jquery的脚本,所以Jquery的脚本文件最先导入。如果你是用MVC2里面自带的Jquery脚本的话,那就是jquery-1.4.1.js。好了,介绍就到这吧。现在来呈现代码方面的说明。首先,我们来看看脚本的导入顺序。这里面主要是三类脚本文件,分别是Jquery、Jquery UI和Ajax.BeginFrom需要的脚本文件,最好是按照固定的顺序来导入。不然有可能会报脚本的错误。

    <script type="text/javascript" src="../Scripts/jquery-1.4.1.js"></script>
    
    <script type="text/javascript" src="../Scripts/JqueryUI/jquery.ui.core.js"></script>
    
    <script type="text/javascript" src="../Scripts/JqueryUI/jquery.ui.position.js"></script>
    
    <script type="text/javascript" src="../Scripts/JqueryUI/jquery.ui.widget.js"></script>
    
    <script type="text/javascript" src="../Scripts/JqueryUI/jquery.ui.dialog.js"></script>
    
    <script type="text/javascript" src="../Scripts/JqueryUI/jquery-ui-1.8.16.custom.js"></script>
    
    <script type="text/javascript" src="../Scripts/MicrosoftAjax.js"></script>
    
    <script type="text/javascript" src="../Scripts/MicrosoftMvcAjax.js"></script>

    接着,我们来看看Jquery UI的Dialog的脚本代码:

    <script type="text/javascript">
        $(function () {
            $("#dialog-modal").dialog({
                autoOpen: false,
                minHeight: 200,
                 550,
                modal: true,
                open: function (event, ui) {
     
                    $.ajax({
                        type: "POST",
                        url: "/Account/LogOnControl",
                        data: {},
                        success: function (data) {
                            $("#dialog-modal").html(data);
                        }
                    });
                }
            });
     
            $("#BtnLogOn").click(function () {
                $("#dialog-modal").dialog("open");
            });
        });
     
        function checkIfLogon(ajaxContext) {
     
            var jsonResult = {};
            try {
                jsonResult = ajaxContext.get_response().get_object();
            } catch (e) {
                return;  // return if result is not json
            }
     
            if (jsonResult.LogSuccessful == true) {
     
                $("#dialog-modal").dialog("close");
                alert("Log Success!");
            }
        }
    </script>

    这里面$("#dialog-modal").dialog({…})就是实现弹出框的代码,触发弹出框的事件是点击了ID为BtnLogOn的按钮时。这里面也有陷阱,如果不小心,你又会掉进去,那就是关于$("#dialog-modal").dialog()的写法,要么你就像我一样,直接把它放到$(function(){…});里面,要么就是把$("#dialog-modal").dialog({…})和$("#dialog-modal").dialog(“open”)都放到同一个函数里面,不然也是会报脚本的错误。里面的open函数,是指打开Dialog的时候,需要执行什么内容。这里面我是用Jquery的Ajax方式来加载登录页面,先附一张图片来看看效果,红框处就是Ajax加载的登录页。 

     这里面Ajax加载进来的登录页是一个局部页面(本项目里面的LogonControl.ascx页面)。此页面的内容如下:
    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<AjaxForm.Models.LogOnModel>" %>
     
    <div id="Container" >
        <% using (Ajax.BeginForm("Logon", "Account", null, new AjaxOptions
           {
               UpdateTargetId = "Container",  
               HttpMethod = "Post",
               OnSuccess = "checkIfLogon",
           }))
           { %>    
     
                <div style="position:relative;clear:both;85%;margin-left:auto;margin-right:auto;margin-top:20px;">
                    <label style="margin: 10px 0px 0px 0px; float:left; clear:both;">User Name:</label>
                        <%: Html.TextBoxFor(m => m.UserName, new { @maxlength = "100", @tabindex = "1", 
                                                              @Style = "margin:2px;float:left;clear:both; 100%;" })%>
                     <label style="margin: 10px 0px 0px 0px; float:left; clear:both;">
                        <%: Html.ValidationMessageFor(model => model.UserName)%></label>
                </div>
                <div style="position: relative; clear:both;85%;margin-left:auto;margin-right:auto;">
                    <label style="margin: 10px 0px 0px 0px; float:left; clear:both;">Password:</label>
                        <%: Html.PasswordFor(m => m.Password, new { @maxlength = "50", @tabindex = "2",
                                                              @Style = "margin:2px;float:left;clear:both;100%;" })%>
                <label style="margin: 10px 0px 0px 0px; float:left; clear:both;">
                        <%: Html.ValidationMessageFor(model => model.Password)%></label>
                </div>
     
                        
                <div style="float: right; margin-right: 20px; margin-top: 50px;">
                        <input type="submit" value="Log On" />
                </div>
        <% } %>
    </div>

    这里面UpdateTargetId 是指这个Ajax.BeginForm执行成功的话,返回的内容将要显示在哪个位置。这里面主要是把验证的错误信息显示出来(这里面相当于重新加载一次LogonControl.ascx页面)。OnSuccess方法是Ajax.BeginForm执行成功的话,需要执行的函数,这里面我是让它关闭弹出框,并alert一个成功的信息。我们来看看这验证结果的效果图: 

     
    这里面我只是验证非空的情况,也就是Action里面并没有做其它的逻辑判断,只要不是非空时,就会关闭Dialog并alert成功信息。
    本文以抛砖引玉的方式来讲解Ajax.BeginForm与Jquery UI(Dialog)的使用方式,希望大家会喜欢。如果大家想转载本文的话,请标注,谢谢合作!
     
  • 相关阅读:
    用Python打造一款文件搜索工具,所有功能自己定义!
    Python+Excel+Word一秒制作百份合同
    只需6行代码,Python将PPT转为Word!
    老板让我从几百个Excel中查找数据,我用Python一分钟搞定!
    爬虫遇到头疼的验证码?Python实战讲解弹窗处理和验证码识别
    SoftEther服务端配置
    SoftEther服务端安装
    nginx学习
    zookeeper安装
    prometheus监控之自动发现
  • 原文地址:https://www.cnblogs.com/csdbfans/p/2316367.html
Copyright © 2011-2022 走看看