MVC模式下如何对多选框数据进行增删改查
一、业务情景:
做的是一个项目管理的增删改查模块,一个项目里面有项目成员属性,而且一个项目可以有多个成员,一个成员可以参加多个项目,多对多关系,数据库表里自然要建立一个关系表。

视图

二、视图显示:
因为新增项目和修改项目的时候用的是同一个视图,所以项目成员多选框那里不仅要显示所有用户,而且要把在项目成立里的数据要选上显示,这里我先把所有用户从用户表里查出来,然后显示在页面上,然后再判断每个用户是否在用户成员表里面,在的话就给勾选上。
<tr>
<td class="field">
<label>
项目成员:@*<span class="xing">*</span>*@ </label>
</td>
<td class="otherfont">
@{
var users = ViewBag.users;
var projectmember = ViewBag.projectmember; }
@foreach (var user in users)
{ bool result = true;
foreach (var test in projectmember)
{
if (test == user.UserId)
{
result = false;
}
else
{
continue; }
}
if (result == true)
{ <input type="checkbox" name="selectusers" value=@user.UserId />@user.RealName }
else
{ <input type="checkbox" name="selectusers" checked="True" value=@user.UserId />@user.RealName } }
</td> </tr>
三、新增模块
新增的时候要把勾选得数据存入项目成员表,先获得所有勾选得数据,然后分离开来,获得每个用户的ID,再做个循环插入数据到数据库,这样就能把所有项目成员都插入到项目成员表了,由于可能存在多个用户,需要多次操作数据库,所以需要使用事物。
/// <summary>
/// 新增项目时添加项目成员表
/// </summary>
/// <param name="str">项目成员组成的字符串</param>
/// <param name="proId">项目ID</param>
/// <returns></returns>
public bool AddUserInProject(string str, Guid proId)
{
bool result = true;//为了后面记录是否全部插入成功做准备
string sqlstr = "";//数据库操作字符串
// List<Guid> historyusers = GetProjectMember(proId);//得到已经存在的项目成员数组
string[] userids = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
int usernum = userids.Length;//用来记录实际要插入的数据条数
for (int i = 0; i < userids.Length; i++)
{
Guid userid = new Guid(userids[i]);//需要增加的用户ID sqlstr = sqlstr + "insert into tb_UserInProject(ProjectId,UserId)values('" + proId + "','" + userid + "');";
} try
{
//string sql = @"insert into tb_UserInProject(ProjectId,UserId)values(@projectid,@userid);"; //需要操作多条数据库语句,使用事物
using (TransactionScope scope = new TransactionScope())
{
using (var context = DataBaseConnection.GetSqlServerConnection())
{
var affectrow = context.Execute(sqlstr);
result = affectrow == usernum;
}
// 没有错误——提交事务
scope.Complete();
}
}
catch (Exception)
{ //throw;
}
return result;
}
四、修改模块
由于当时准备把新增和修改的业务逻辑都写在一个方法里面,所以纠结了很久,因为新增的时候就已经很麻烦了,还要修改,修改的时候又想着哪些用户原来有,哪些需要增加进去,哪些需要去掉,所以让我纠结了很久。后来把新增业务逻辑和修改业务逻辑分别放在不同方法中后,就渐渐明了了,修改的时候,先直接删除掉原来的项目成员,然后把新的项目成员添加进去即可。当然,由于存在操作多个语句,所以都需要使用事物来操作,这样一旦哪个没成功,就可以自动回滚。
/// <summary>
/// 修改项目成员
/// </summary>
/// <param name="str">项目成员s</param>
/// <param name="proId">项目ID</param>
/// <returns></returns>
public bool UpdateUserInProject(string str, Guid proId)
{
bool result = true;//为了后面记录是否全部插入成功做准备
string sqlstr = "";//数据库操作字符串
string sqldelstr = @"delete tb_UserInProject where ProjectId='"+proId+"'";
List<Guid> historyusers = GetProjectMember(proId);//得到已经存在的项目成员数组
int historyusersnum = historyusers.Count;//获得历史成员的数目 string[] userids = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
int usernum = userids.Length;//用来记录实际要插入的数据条数
for (int i = ; i < userids.Length; i++)
{
Guid userid = new Guid(userids[i]);//需要增加的用户ID
sqlstr = sqlstr + "insert into tb_UserInProject(ProjectId,UserId)values('" + proId + "','" + userid + "');";
}
//需要操作多条数据库语句,使用事物
using (TransactionScope scope = new TransactionScope())
{
using (var context = DataBaseConnection.GetSqlServerConnection())
{
var affectrow1 = context.Execute(sqldelstr);//删除原来项目成员
var affectrow2 = context.Execute(sqlstr);//添加修改后的项目成员
result = (affectrow1 == usernum)&&(affectrow2==historyusersnum);
}
// 没有错误——提交事务
scope.Complete();
} return result;
}
查询和删除在修改的时候有体现,点击修改的时候,会查询以前的项目成员,进行修改的时候,会先删除以前成员,然后添加新的成员数组!!
注:本人编程新手,肯定有很多纰漏,本文纯属个人笔记,欢迎大家批评指教,当然,如需转载,请标明出处! ----喜狗
MVC模式下如何对多选框数据进行增删改查的更多相关文章
- 在MVC模式下通过Jqgrid表格操作MongoDB数据
看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...
- MVC模式:实现数据库中数据的增删改查功能
*.数据库连接池c3p0,连接mysql数据库: *.Jquery使用,删除时跳出框,确定是否要删除: *.使用EL和JSTL,简化在jsp页面中插入的java语言 1.连接数据库 (1)导入连接数据 ...
- 国产化之路-统信UOS + Nginx + Asp.Net MVC + EF Core 3.1 + 达梦DM8实现简单增删改查操作
专题目录 国产化之路-统信UOS操作系统安装 国产化之路-国产操作系统安装.net core 3.1 sdk 国产化之路-安装WEB服务器 国产化之路-安装达梦DM8数据库 国产化之路-统信UOS + ...
- Online Coding开发模式 (通过在线配置实现一个表模型的增删改查功能,无需写任何代码)
JEECG 智能开发平台. 开发模式由代码生成器转变为Online Coding模式 (通过在线配置实现一个表模型的增删改查功能,无需一行代码,支持用户自定义 ...
- MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据
看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
easyui datagrid 禁止选中行 没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...
- SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显
在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1. ...
- 六:MVC数据建模(增删改查)
今天我们来学习mvc增删改查等操作(试着结合前面学习的LINQ方法语法结合查询) 我创建了一个car的数据库,只有一个Cars表 表里面就几个字段 插入了一些数据 想要创建一个ADO.NET实体数据模 ...
- 基于MVC和Bootstrap的权限框架解决方案 二.添加增删改查按钮
上一期我们已经搭建了框架并且加入了列表的显示, 本期我们来加入增删改查按钮 整体效果如下 HTML部分,在HTML中找到中意的按钮按查看元素,复制HTML代码放入工程中 <a class=&qu ...
随机推荐
- 如何中途停止RMAN备份任务
问题背景 如果,你负责的数据库服务器,在RMAN进行全备时,业务又有大量数据要处理,一时间,系统资源直接被耗尽,影响到了业务的正常,你准备怎么处理? 解决办法 [不推荐]当时我们组的另外一个同事在没有 ...
- php过滤iphone的emoji表情
public static function removeEmoji($text) { $clean_text = ""; // Match Emoticons $regexEmo ...
- wifi智能插座 一键扫描局域网内插座Ip及其它信息 Python源代码API
转载请保留原地址. http://www.cnblogs.com/lsqandzy 最近买了几个智能插座玩,插座安装在家里,连接好wifi,不管你人在哪里,通过手机,一键开启或关闭插座电源,想象一下, ...
- 利用matlab实现以下功能:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序思路: 对n进行分解质因数,应先找到一个最小的质数k,从2开始,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可. (2)如果n不等于k,则应打印出k的 ...
- wordpress教程之文章页single.php获取当前文章所属分类
之所以要发这篇文章,是因为这个方法适用于: WP默认文章分类 手动添加的自定文章分类 插件(custom post type ui)添加的自定义文章分类(含taxonomy) 方法目的:在文章模板中, ...
- SQL排除重复结果只取字段最大值
如何用SQL排除重复结果只取字段最大值的记录?要求得到的结果(即是PID相同的记录只取ID值最大的那一条). select * from [Sheet1$] a from [Sheet1$] wher ...
- C# 获取当前应用程序的绝对路径支持asp.net
Asp.net在类库中获取某文件的绝对路径.这个问题在初学的时候就经常碰到过,经常是查了忘,忘了查.浪费了大量的今天专门写个文章,以后到这里查.有时间顺便记得研究下这个东西. 在主程序目录就不说了 ...
- Redhat关闭SELinux和防火墙的办法(转)
Redhat使用了SELinux来增强安全,关闭的办法为:1. 永久有效修改 /etc/selinux/config 文件中的 SELINUX="" 为 disabled ,然后重 ...
- 学习DSP(三)安装C2833x/C2823x C/C++ 头文件和外设示例-压缩包
进入http://www.ti.com.cn/product/cn/tms320f28335 下载C2833x/C2823x C/C++ 头文件和外设示例 即SPRC530,目前最新版本是V131.安 ...
- nginx监听端口和反向代理端口的权限问题
Linux的SELinux安全性控制除作用于文件系统外还作用于端口,这使得那些作为服务启动的进程只能在规定的几个端口上监听.为叙述方便我们称之为受控端口. nginx监听端口 要查看当前有哪些受控端口 ...