zoukankan      html  css  js  c++  java
  • 弹窗关闭并刷新页面元素

    我想,对于初学者来说,可能多多少少都会遇到这样的问题,比如我想对一个模块进行增、删、改操作,希望弄的炫一点,就用弹窗的形式,而不是基本的新页面形式。好,弹窗能实现了,但是当提交了数据点击“添加”或者“保存”或者“删除成功”等确定按钮的时候,如何做到该页面元素的自动刷新和之前弹窗的自动关闭。我也是一个MVC的初学者,这里,我用了一些小技巧来实现这样的形式。

    首先来看VIEW层,刷新页面元素和自动关闭弹窗都是在这一层,用JS代码来控制的,详细见代码:

    1         function Add() {   //定义一个弹窗
    2             var window = $('#AddRoleWindow').data('tWindow');
    3             window.ajaxRequest("/Role/AddRole/");//弹窗调用的方法
    4             window.center().open();  //弹窗的打开
    5         }

    这里是一个添加角色的弹窗,弹窗内容视图为:

     1 @using (Ajax.BeginForm("AddRole", "Role", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "Message", OnSuccess = "AddWindow()" }))
     2 {
     3     @Html.ValidationSummary(true)
     4     <fieldset>
     5         <legend>添加角色cshtml</legend>
     6         <div id="Message" style="color:Red"></div>
     7 
     8         <div class="editor-label">
     9             @Html.LabelFor(model => model.RoleParentID)
    10         </div>
    11         <div class="editor-field">
    12             @Html.EditorFor(model => model.RoleParentID)
    13             @Html.ValidationMessageFor(model => model.RoleParentID)
    14         </div>
    15 
    16         <div class="editor-label">
    17             @Html.LabelFor(model => model.RoleName)
    18         </div>
    19         <div class="editor-field">
    20             @Html.EditorFor(model => model.RoleName)
    21             @Html.ValidationMessageFor(model => model.RoleName)
    22         </div>
    23 
    24         <div class="editor-label">
    25             @Html.LabelFor(model => model.RoleFunctionNotes)
    26         </div>
    27         <div class="editor-field">
    28             @Html.EditorFor(model => model.RoleFunctionNotes)
    29             @Html.ValidationMessageFor(model => model.RoleFunctionNotes)
    30         </div>
    31 
    32         <div class="editor-label">
    33             @Html.LabelFor(model => model.IsChildrenRole)
    34         </div>
    35         <div class="editor-field">
    36             @Html.EditorFor(model => model.IsChildrenRole)
    37             @Html.ValidationMessageFor(model => model.IsChildrenRole)
    38         </div>
    39 
    40         <p>
    41             <input type="submit" value="保 存"  />
    42         </p>
    43     </fieldset>
    44 }

    这里使用的Raror视图,如果不习惯的朋友可以使用aspx,只需要把@改为<% %>就行了,这里不多介绍。这个视图是用Ajax.BeginFor的方式来传递表单数据UpdateTargetId是指在指定区域内显示对对应数据,OnSuccess 是指执行成功后调用该方法。

    看后台控制器代码:

     1         [AcceptVerbs(HttpVerbs.Post)] //POST表单获取数据需要的
     2         public ActionResult AddRole(string Roleid)
     3         {
     4             T_Role ads = new T_Role();
     5             Initialize(ads);
     6             string res = "角色添加成功";
     7             RoleRepository rep = new RoleRepository();
     8             try
     9             {
    10                 if (TryUpdateModel(ads))
    11                 {
    12                     int roleid = db.T_Role.OrderByDescending(o=>o.RoleID).FirstOrDefault().RoleID;//倒叙查找最大ID
    13                     ads.RoleID = roleid + 1;
    14                     rep.Insert(ads);  //将POST表单填写的数据加入到数据库中
    15                 }
    16             }
    17             catch
    18             {
    19                 res = "角色添加失败";
    20             }
    21             ViewData["ActionMessagesForAdd"] = res; 
    22             return PartialView("../Shared/ShowActionMessage");//这里返回的数据就是之前提到的UpdateTargetId显示的数据
    23         }

    接下来看JS代码,就是OnSuccess调用的方法了:

    1         function AddWindow(ms) {  //ms为之前提到的控制器后面返回的数据
    2             var res = ms;
    3             if (res != "" )
    4                 alert(res);
    5             else
    6                 alert("添加失败");
    7             $('#RoleTree').jstree('refresh', -1); 
    8             $('#AddRoleWindow').data('tWindow').close();
    9         }

    注意了,代码的第7行,就是对页面中知道部分数据的刷新,这里是对知道的jstree进行刷新,如果是要刷新telerik,可以用:

    1                             var grid = $('#UsersGrid').data('tGrid'); //重新加载(UsersGrid是telerik的Name)
    2                             grid.rebind();
    3                             autodisapear();

    上面的第8行就是对指定弹窗的关闭操作了,就是一句JS代码。如有不懂得或者代码有问题的,欢迎探讨。

  • 相关阅读:
    js和php中几种生成验证码的方式
    php中mysqli 处理查询结果集的几个方法
    100多个基础常用JS函数和语法集合大全
    js中的slice()、substring()、substr()、split()、join()、indexof()
    织梦dedecms标签大全总结
    0619-dedeCMS数据表
    0619-dedeCMS的安装、重装、目录说明、基本操作及注意事项
    0607-抽象类、抽象方法、接口、类的重载、类的自加载、对象的克隆
    0606-工厂模式、单例模式、DBDA的单例和完整功能
    js 替换/
  • 原文地址:https://www.cnblogs.com/yjnet/p/JsForPopup.html
Copyright © 2011-2022 走看看