ITOO---MVC3.0动态添加表格的行数并Controller中获取添加数据

MVC3.0动态添加表格的行数并Controller中获取添加数据

 

         最近由于项目的中的相关需求,需要在MVC的视图中动态的添加添加数据的行数,并将前台输入的多行数据在Controller中获得传回服务端。本文将介绍如何从MVC的View端动态添加数据行数并将输入的数据在Controller中获得。

 

         问题分析

         一、设计前台显示页面(View)。

 

         视图中样式

@*添加上课班信息窗口*@
<div id="Addwin" class="easyui-window" title="添加教学班信息" style="width: 815px; height: 400px"
    data-options="iconCls:'icon-save',modal:true">
    <div style="padding: 15px 15px 10px 60px;">
        <form id="AddForm" method="post"  style="width: 710px;height: 300px">
            <table cellpadding="3"  id="myTab">
                @*<thead>*@
                <tr align="center">
                    <td>教学班编号</td>
                    <td>教学班名称</td>
                    <td>课程名称</td>
                    <td>教师名</td>
                    <td>教工号</td>
                    <td>选择学生</td>
                    <td>人数</td>
                    <td style="border:0"></td>
                </tr>
                <tr>
                    <td>
                        <input  type='text' style='width:80px' name="OnClassNo1"  id="OnClassNo1" />
                    </td>
                    <td>
                        <input  type='text' style='width:130px' name="OnClassName1"  id="OnClassName1" />
                    </td>
                    <td>
                        <input  type='text' style='width:100px' name="CourseName1"  id="CourseName1" />
                    </td>
                    <td>
                        <input  type='text' style='width:50px' name="TeacherName1"  id="TeacherName1" />
                    </td>
                    <td>
                        <input  type='text' style='width:80px' name="EmployeeNo1"  id="EmployeeNo1" />
                    </td>
                    <td>
                        <a id="selectStu1" href="#" onclick="addStudentWin();">选择学生</a>
                    </td>
                    <td>
                        <input  type='text' style='width:40px' name="TotalMember1"  id="TotalMember1" />
                    </td>
                     <td style="border:0">
                        <input style='width:40px; border:0' type='hidden' name="StudentArray1"  id="StudentArray1" />
                     </td>
                    <td>
                        <div>
                            <a onclick="addNewRow();" plain="true" iconcls="icon-add" class="easyui-linkbutton" href="#" id="add"></a>
                            <a onclick="removeRow();" plain="true" iconcls="icon-remove" class="easyui-linkbutton" href="#" id="eidt"></a>
                        </div>
                    </td>
                </tr>
            </table>
            @*position:fixed;bottom:15px;left:250px;*@

        </form>
            <div class="login" style="text-align: center;bottom:15px;margin-top: 5px "  >
                <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-ok'" onclick="submitInfo();" align="center">确认</a>
                <a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" style="margin-left: 50px" onclick="javascript:$('#Addwin').window('close');">取消</a>
            </div>
    </div>
</div>

 

         二、如何动态的添加(删除)记录的行数。

 

         在这里我尝试了两种方法,都能够实现动态的添加行数的作用下面是两种方法的JS文件内容。

         方法一:

<pre name="code" class="javascript">var i = 1;
function addRow() {
    //用于表格id的自增长
    ++i;
    if (i<5) {
        //克隆指定的行
        var newTr =tr1.cloneNode(true);
        //指定新行的id
        newTr.id = "tr" + i;
        //指定新行的name
        newTr.name = "tr" + i;
        //在当前表格中插入行
        tr1.parentNode.insertAdjacentElement("beforeEnd", newTr);
    } else {
        alert("提示消息","最多添加四行!");
    }
}

function delRow() {
    var tab = document.getElementById('list');
    if (tab.rows.length > 2) {
        tab.deleteRow(tab.rows.length - 1);
    }
    else {
        alert("已经剩下最后一行,不能删除!");
    }
}

 

         方法二:

//动态创建table
function addNewRow() {
    var tabObj = document.getElementById("myTab");//获取添加数据的表格
    var rowsNum = tabObj.rows.length;  //获取当前行数
    var colsNum = tabObj.rows[rowsNum - 1].cells.length;//获取行的列数
    var myNewRow = tabObj.insertRow(rowsNum);//插入新行
    if (rowsNum >= 9) {
        alert("警告,最多添加八行记录!");
    } else {
        var newTdObj1 =myNewRow.insertCell(0);
        newTdObj1.innerHTML = "<input  type='text' style='width:80px'name='OnClassNo" +rowsNum + "'id='OnClassNo" +rowsNum + "'/>";
        var newTdObj2 =myNewRow.insertCell(1);
        newTdObj2.innerHTML = "<inputtype='text' style='width:130px' name='OnClassName" + rowsNum + "'id='OnClassName" +rowsNum + "'/>";
        var newTdObj3 =myNewRow.insertCell(2);
        newTdObj3.innerHTML = "<inputtype='text' style='width:100px' name='CourseName" + rowsNum + "' id='CourseName" + rowsNum + "'  />";
        var newTdObj4 =myNewRow.insertCell(3);
        newTdObj4.innerHTML = "<input  type='text' style='width:50px'name='TeacherName" + rowsNum + "' id='TeacherName" + rowsNum + "'/>";
        var newTdObj5 = myNewRow.insertCell(4);
        newTdObj5.innerHTML = "<inputtype='text' style='width:80px' name='EmployeeNo" + rowsNum + "'id='EmployeeNo" +rowsNum + "'/>";
        var newTdObj6 =myNewRow.insertCell(5);
        newTdObj6.innerHTML = "<inputtype='text' style='width:50px' name='selectStudent" + rowsNum + "'id='selectStudent" + rowsNum + "'  value='选择学生'/>";
        newTdObj6.innerHTML = "<aid='selectStu" +rowsNum + "'href='#' onclick='addStudentWin();'>选择学生</a>";
        var newTdObj7 =myNewRow.insertCell(6);
        newTdObj7.innerHTML = "<inputtype='text' style='width:40px' name='TotalMember" + rowsNum + "'id='TotalMember" +rowsNum + "'  />";
        var newTdObj8 =myNewRow.insertCell(7);
        newTdObj8.innerHTML = "<inputtype='hidden' style='width:40px; border:0' name='StudentArray" + rowsNum + "'id='StudentArray" + rowsNum + "' />";
        var newTdObj9 =myNewRow.insertCell(8);
        newTdObj9.innerHTML = "<div><aonclick='addNewRow();' plain='true' iconcls='icon-add'class='easyui-linkbutton' href='#' id='add'>加</a>" +
                              "<aonclick='removeRow();' plain='true' iconcls='icon-remove'class='easyui-linkbutton' href='#' id='eidt'>删</a></div>";

    }
}
//窗口表格删除一行
function removeRow() {
    var tab = document.getElementById('myTab');
    var i = tab.rows.length;
    if (tab.rows.length > 2) {
        tab.deleteRow(tab.rows.length - 1);
        --i;
    }
    else {
        alert("已经剩下最后一行,不能删除!");
    }
}

 

         最终我选择了第二种方案,因为相对于第一种方案第二种方案中的数据更容易获得。第一种方案不同的是行号,每行中相同字段的数据不易区分;第二种方案每行相同字段的ID是不一样的易于数据的获得。

 

         三、如何提交输入的数据

   

         JS实现如下:

//提交表单
function submitInfo() {
    //提交表单
     $.messager.progress(); // 显示进度条
    $('#AddForm').form('submit', {
        url: "/OnClass/AddOnClassInfo",
        onSubmit: function () {
        },
        success: function (data) {
            if (data > 0) {
                alert("保存成功");
            }
            $('#dg').datagrid('reload');    // 重新载入当前页面数据 

            //$.messager.progress('close'); // 如果提交成功则隐藏进度条
            $('#Addwin').window('close');  //关闭窗口
        }
    });
}

 

         四、在Controller中获得前台输入的数据

 

  数据已经提交了如何去或者这些数据,就又是一个问题了,如何解决详见如下代码。

 <pre name="code" class="csharp">        public void AddOnClassInfo(IList<OnClass> lstOnClass)
        {
            //1.获取行数
            int rowNum = 0;
            string strOnClassName = "";
            bool flag = true;
            do
            {
                rowNum++;
                //stringstrTeachingName = "teachingClassName" + rowNum;
                strOnClassName = Request["teachingClassName" + rowNum];
                if (strOnClassName==null || strOnClassName=="")
                {
                    flag = false;
                }
            } while (flag);

            //2.循环每一行,给实体对象分别赋值
            List<OnClass> lstOnClassInfo= new List<OnClass>();

            for (int i = 1; i <rowNum; i++)
            {
                OnClass onClass = new OnClass()
                {
                    OnClassID = Guid.NewGuid(),
                    OnClassName = Request["teachingClassName" + i],

                    // for (int j = 0; j< rowNum; j++)
                    //{

                    //}
                };

                lstOnClassInfo.Add(onClass);
            }
            //调用服务端服,跟本文主题无关
            onClassService.AddOnClassBatch(objOnClass);
        }

 

         本分的思路想必读完文章之后大家也能有所了解,我将这个问题分解成了四部分,每一部分既独立又相互联系,最后达到了自己想要的结果。

         我想,无论考虑什么问题我们都应该像这篇文章一样将问题分解,然后一个一个的小问题去解决,最终达到解决整个问题的目标。首先从简单的入手,从自己已有的积累出发。

时间: 2024-10-03 15:34:32

ITOO---MVC3.0动态添加表格的行数并Controller中获取添加数据的相关文章

asp.net动态删除表格的行

问题描述 asp.net动态删除表格的行 当点击表格的某行时,将该行ID赋值给Text.value._Page_Load里添加代码使得刷新页面时该行被删除大神们帮帮我,是在是找不出错误来了.就是没有办法实现删除行的功能.后天获取Text1.Value是什么都没有,为什么会这样呢_前台代码: <%@ Page Language=""C#"" AutoEventWireup=""true"" CodeFile="&

js获取表格的行数和列数的方法_javascript技巧

如何使用JavaScript获取一个表格的行数和列数?其实很简单,假设存在如下表格: <table width="100%" border="1" cellspacing="0" cellpadding="0" id="example_table"> <tr> <td> </td> <td> </td> <td> </

java web-JTabbedPane中添加了JPanel,然后在Jpanel中如何添加JInternalFrame

问题描述 JTabbedPane中添加了JPanel,然后在Jpanel中如何添加JInternalFrame 代码如下 public class TestInternalFrame { private JFrame frame = new JFrame("JInternalFrame"); // private JTabbedPane tab = new JTabbedPane(); private JPanel mainPanel = (JPanel) frame.getConte

dev gridcontrol 行数-dev的gridcontrol获取行数的问题

问题描述 dev的gridcontrol获取行数的问题 dev的gridcontrol获取行数的问题.control没有row这个属性,该怎么获取当前列表里的行数呢? 解决方案 gridView有这个属性 gridControl绑定数据源之后 就是绑定在了gridView上的.

基于JavaScript实现动态添加删除表格的行_javascript技巧

又一个动态控制表格的效果,用JavaScript动态生成表格行.表格列,以及还可动态删除这些行列,行等,运行代码后,点击对应的功能按钮,即可实现对应的表格操作功能. 1.jsp <table id="viewTabs"> <thead> <tr> <th>产品名称</th> <th>编号</th> <th>数量</th> <th>重量</th> <t

js动态生成指定行数的表格

下面用js实现可以生成用户所需行数的表格. 1.首先在body中填入下列代码,获取用户填入的行数值 1 <table> 2 <tr> 3 <td>动态生成表格</td> 4 <td><input id="Cold" type="text" class="input" size="10" name="Num"/>行</td>

基于JavaScript实现动态创建表格和增加表格行数_javascript技巧

在工作,项目需求中,有时候表格的行数不能够满足我们的需求,这时需要我们动态的增加表格的行数,下面小编通过一段代码实例给大家介绍js创建表格和增加表格的行数的方法,并且还实现了隔行变色功能.对此感兴趣的朋友可以参考一下代码: js代码如下所示: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>动态操作表格</title> </head>

MVC3.0 采用Jquery实现局部刷新

转自 http://www.cnblogs.com/qidian10/archive/2011/07/27/2118021.html   MVC3.0刚入门,所有的都在摸索中,官方的MUSIC也无心看,只能做一个功能海搜一下.最近做了一个局部刷新的功能,功能大致是根据页面左侧的内容,刷新右侧的Grid信息 效果图片: 单击左侧后:(单击时候右侧将会出现加载效果) 这里是实现逻辑,代码 1.首先主页面 ////////////////////////////////////////////////

JS组件Bootstrap Table表格多行拖拽效果实现代码_javascript技巧

前言:前天刚写了篇JS组件Bootstrap Table表格行拖拽效果,今天接到新的需要,需要在之前表格行拖拽的基础上能够同时拖拽选中的多行.用了半天时间研究了下,效果是出来了,但是感觉不尽如人意.先把它分享出来,以后想到更好的办法再优化吧. 一.效果展示 1.拖动前 2.拖动中 3.拖动后 4.撤销回到拖动前状态 二.需求分析 通过上篇我们知道,如果要实现拖拽,必须要有一个可以拖拽的标签,或者叫容器,比如上篇里面的tr就是一个拖拽的容器,那么如果要实现选择行的拖拽,那么博主的第一反应是将选中的