问题描述:
在上图复选框checkbox中选中多个要删除的专业名称,当点击删除按钮时把选中的专业删除。
要求使用 ajax 实现异步地删除,减少刷新网页的次数。
asp.net mvc里前端与后台进行复杂数据交互是一件比较麻烦的事情,简单的数据交互可以使用request对象获取同名参数的方式获取,
复杂数据一般难以使用request对象获取,比如表单里提交的各种不同类型的数据,
如果表单里的各种数据可以抽象成一个类,那么就可以通过创建一个model,然后在action里使用模型对象进行绑定。
public ActionResult JsonClasses(ClassesModels classes)
但在此例中要删除的专业显然不能抽象成一个类,只是一个长度不确定的数组。
要使用ajax往控制器里传递这些需要删除的专业,只能以数组的形式传递,
但需要将数组序列化后传递才能被控制器端接收,下面本人通过Jqery的join()方法转化为可被解析的数据格式
$('#delmajor').click(function () {
var datas =[];
var i = 0;
$('input[name="delmajor"]:checked').each(function () {
var temp = $(this).parent().parent();
datas[i++] = $(this).val();
temp.remove();
});
if (datas != null) {
var choose = confirm("您确定要删除这专业?");
var test = datas.join(',');
alert(test);
if (choose==true) {
$.ajax({
url: "/SystemAdmin/DelMajor",
type: "POST",
dataType: "json",
data: { "test": test },
success: function (data) {
alert(data.message);
},
error: function () {
alert("删除失败!");
}
});
} else {
return false;
}
}
});
控制器端代码如下:
public ActionResult DelMajor()
{
var message = Request["test"];
string[] majornames = message.Split(',');
var helper=new MajorTableHelper();
int affectLine= helper.DelMajor(majornames);
if (affectLine>0)
{
return Json(new { message = "success" });
}
else
{
return Json(new { message = "fail" });
}
}
DelMajor()方法如下
public int DelMajor(string[] majorname)
{
string sqltext = @"delete from major where MajorName=@majorName";
int affectLine = 0;
var arguments = new List<SqlParameter>();
foreach (string t in majorname)
{
SqlParameter major = new SqlParameter("@majorName", SqlDbType.NVarChar);
arguments.Clear();
major.Value = t;
arguments.Add(major);
affectLine += SqlHelper.ExecuteNonquery(sqltext, arguments.ToArray());
}
return affectLine;
}