一个简单的数据弹框更改功能

  项目中因为某个页面的数据太多,容易使页面看起来比较杂乱,所以我们分成了A、B、C等的各个小块来显示,不过这样的数据显示修改起来是很麻烦的,需要将整个页面的数据

传回服务器,比较浪费资源。顺理成章的我们想到了对每一个小块进行分别编辑,比如点击A小块,A小块的内容弹出编辑对话框,编辑完后保存,对话框消失,然后在编辑B小块。

效果图如下:

  

  说起来很容易,做起来并不简单,下面我们一起来看看怎么实现吧!

  <1>我自己构造了三张表(Person、School、Company),插入一条简单的数据作为测试。

  <2>我构建了一个VM_Person来获取所有的Person数据传递到页面,分Person、School、Company三大块显示。

  <3>每一小块构建两个PartialView,一个用来显示,一个用来编辑。然后把这几块组合到一个页面中。这里注意我将<input type="button" id="PersonEdit"

value="Edit">放在了PartialView的外面,如果将按钮放在PartialView里面的话,第一次编辑操作之后这个按钮就不工作了。(这里可以将button放到partialview里面去,但同时将下面要讲到的弹出对话框的相关代码都放到partialview里面就可以了,我做项目的时候因为对话框太多,并没有即使的将各个对话框对应的JQuery代码放到相应的partialview里,才出现了编辑按钮只工作一次的情况。2013-4-25 1:40分改)

@model DialogOperate.Models.VM_Person

@{
    ViewBag.Title = "Details";
}

<table style="width:100%;">
    <tr>
        <td>
            <fieldset>
                <legend>Person</legend>
                    @{Html.RenderPartial("_D_Person", Model);}
                    <input  type="button" id="PersonEdit" value="Edit"/>
                </fieldset>
        </td>
    </tr>
    <tr>
        <td>
            <fieldset>
                <legend>Company</legend>
                    @{Html.RenderPartial("_D_Company", Model);}
                </fieldset>
        </td>
    </tr>
    <tr>
        <td>
            <fieldset>
                <legend>School</legend>
                    @{Html.RenderPartial("_D_School", Model);}
                </fieldset>
        </td>
    </tr>
</table>

@{Html.RenderPartial("_E_Person", Model);}
@{Html.RenderPartial("_E_Company", Model);}
@{Html.RenderPartial("_E_School", Model);}

 

  

  <4>下来我们需要做出简单的弹框效果

     首先添加要引用的js文件     

  <!--Jquery 皮肤-->
    <link href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.10.2/themes/redmond/jquery-ui.css" rel="stylesheet" type="text/css" />
    <!--Jquery 1.7.2-->
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js" type="text/javascript"></script>
    <!--Jquery UI 1.10.2-->
    <script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.10.2/jquery-ui.min.js" type="text/javascript"></script>    

     我们先把下面的三个编辑框变成对话框,让他们隐藏,然后在点击Edit的时候,弹出显示框对于的对话框。    

    //Person
    //将Person的编辑框变成对话框,隐藏
    $("#PersonEditTable").dialog({
        autoOpen: false,
        height: 500,
        width: 550,
        modal: true,
        show: {
            effect: "blind",
            duration: 1000
        },
        hide: {
            effect: "explode",
            duration: 1000
        }
    });
    //点击编辑 弹出 对话框
    $("#PersonEdit").click(function () {
        $("#PersonEditTable").dialog("open");
    });

   <5>现在弹框效果已经有了,然后我们需要做的是在我们保持修改的数据的时候,异步刷新被修改的对话框对应的显示框。这里用到了MVC中的AJAX帮助方法。

      首先要添加一个js文件,这个在生成MVC项目的时候都会被加载进来。只有添加了这个,我们在使用AJAX的时候在能起作用。      

    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")"></script>

         以Person为例。现在我们需要对_D_Person(View)进行一下修改,代码即注释如下:这里要注意的是<div id="PersonEditTable">这里的id是我们要弹出的对话框的

id,我们要保证Ajax代码在这个div内部,代码才能工作。如果将id添加到table上,Ajax代码就不工作了。           

<div id="PersonEditTable">
    <!--PersonModify        actionName-->
    <!--new{id=Model.Id}    避免每个页面都要添加一个 hideInput来存id,这里将id作为参数传给对于的action-->
    <!--UpdateTargetId      异步操作要更新的目标Id,这里用的是_D_Person的Table的Id,更新他的显示数据-->
    @using (Ajax.BeginForm("PersonModify", new { id = Model.Id }, new AjaxOptions
    {            
             UpdateTargetId = "PersonDisplayTable"        
    }))
    {
    <table  title="Person">
       ..........
    </table>
    }
</div>

     然后去controller里添加我们的 PersonModify Action(Controller)     

public ActionResult PersonModify(VM_Person person,int id)
        { 
            //这里是对象修改的代码,不同的地方可能不太一样,你的项目和我的可能不同,所以不多做讲解
            Person p=new Person{
                Id=id,
                Name=person.Name,
                Age =person.Age,
                Country =person.Country,
                Phone  =person.Phone
            };
            db.Entry(p).State = EntityState.Modified;
            db.SaveChanges();

            //这里的return是重点,我们return了一个PartialView,model的类型是VM_Person,这里的model就是我们要修改的数据的实例,这样_D_Person就接受到了我们改变的数据了
            //这里存在一个问题,就是数据在数据库的修改 和 更改后的数据的显示 分开了,这就可能出现 即使没修改成功,显示的数据也会改变的情况,这个后面有解决办法。
            return PartialView("_D_Person",person);
        }

       下面我们来说一下关于数据验证的问题,其实也并不复杂,我们需要在我们的VM_Person上添加我们的验证信息,然后再在页面上做验证就好了。注意这里是在

VM_Person而不是Person。这里的添加要和数据库对应。

       首先添加两个script,不知道为什么加这两个,但是不加不工作。     

  <script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js" type="text/javascript"></script>
    <script src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>

       我们为Name添加一个特性    

     [StringLength(10)]
        public string Name { get; set; }

      在页面_E_Person上添加验证:      

    @Html.ValidationMessageFor(x=>Model.Name)

      效果如下:这样用户的数据不通过验证的话,是没办法提交的。    

   最后我们在为Ajax.BeginForm方法的AjaxOptions添加OnSuccess事件,让成功修改数据之后,对话框关闭就OK了。操作方法如下:    

OnSuccess="success"  
.........
<script>
    function success()
    {
        $("#PersonEditTable").dialog("close");
    }
</script>

 

 

    

转载于:https://www.cnblogs.com/feiDD/articles/3038500.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个完整的HTML示例代码,演示如何使用Datatables添加新增数据和修改数据框,并与Java后端实现数据交互: ``` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Datatables示例</title> <link rel="stylesheet" href="https://cdn.datatables.net/1.10.25/css/jquery.dataTables.min.css"> <link rel="stylesheet" href="https://cdn.datatables.net/buttons/1.7.1/css/buttons.dataTables.min.css"> <link rel="stylesheet" href="https://cdn.datatables.net/select/1.3.3/css/select.dataTables.min.css"> <link rel="stylesheet" href="https://cdn.datatables.net/editor/2.0.6/css/editor.dataTables.min.css"> </head> <body> <table id="example" class="display" style="width:100%"> <thead> <tr> <th>ID</th> <th>Name</th> <th>Position</th> <th>Office</th> <th>Salary</th> </tr> </thead> <tbody> </tbody> <tfoot> <tr> <th>ID</th> <th>Name</th> <th>Position</th> <th>Office</th> <th>Salary</th> </tr> </tfoot> </table> <button id="add">Add new record</button> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.min.js"></script> <script src="https://cdn.datatables.net/buttons/1.7.1/js/dataTables.buttons.min.js"></script> <script src="https://cdn.datatables.net/select/1.3.3/js/dataTables.select.min.js"></script> <script src="https://cdn.datatables.net/editor/2.0.6/js/dataTables.editor.min.js"></script> <script> $(document).ready(function() { var table = $('#example').DataTable({ ajax: { url: 'data.json', dataSrc: '' }, columns: [ { data: 'id' }, { data: 'name' }, { data: 'position' }, { data: 'office' }, { data: 'salary' } ] }); var editor = new $.fn.dataTable.Editor({ ajax: { create: { url: '/add', type: 'POST' }, edit: { url: '/update', type: 'PUT' }, remove: { url: '/delete', type: 'DELETE' } }, table: '#example', fields: [ { label: 'ID:', name: 'id' }, { label: 'Name:', name: 'name' }, { label: 'Position:', name: 'position' }, { label: 'Office:', name: 'office' }, { label: 'Salary:', name: 'salary' } ] }); $('#add').on('click', function () { editor.create({ title: 'Add new record', buttons: 'Add' }); }); $('#example').on('click', 'tbody td:not(:first-child)', function (e) { editor.inline(this); }); }); </script> </body> </html> ``` 在这个示例中,我们使用了Datatables的Editor插件来实现添加/修改数据和删除数据功能。在Java后端,我们使用了Spring MVC框架来处理提交的数据。需要注意的是,示例中的Java后端代码并不完整,需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值