我有下面的控制器操作方法。
public int BulkUpdate(List employees) {
Connection();
employees = GetAllEmployees().ToList();
// using reflection, i mean why did i use this ??
//used it for converting the generic list into datatables.
DataTable dt = new DataTable(typeof(Employee).Name);
PropertyInfo[] props = typeof(Employee).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var prop in props)
{
dt.Columns.Add(prop.Name);
}
foreach (var employee in employees)
{
var values = new object[props.Length];
for (int i = 0; i < props.Length; i++)
{
values[i] = props[i].GetValue(employee, null);
}
dt.Rows.Add(values);
}
//
using (SqlCommand cmd = new SqlCommand("BulkUpdateEmployee", con))
{
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parameter = cmd.Parameters.AddWithValue("@tblEmployeeType", dt);
parameter.SqlDbType = SqlDbType.Structured;
parameter.TypeName = "dbo.EmployeeType";
con.Open();
var rowsAffected = cmd.ExecuteNonQuery();
con.Close();
return rowsAffected;
}//using ends here
}
and this method is being called in main controller:
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] public JsonResult BulkUpdateOrInsert(List employees) { int rowsAffected=empRepo.BulkUpdate(employees); return Json(rowsAffected, JsonRequestBehavior.AllowGet);
}
这是视图文件:
@using System.Collections
@model IEnumerable<Employee_Management_System.Models.Employee>
@{
ViewBag.Title = "BulkUpdateOrInsert";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
<script type="text/javascript">
$("body").on("click", "#btnSave", function() {
//Have to Loop through the Table rows and build a JSON array maybe try passing it to Controller action.
var employees = new Array();
debugger;
$("#tblEmployees tbody tr").each(function() {
var row = $(this);
var employee = {};
employee.Name = row.find("td").eq(0).html();
employee.City = row.find("td").eq(1).html();
employee.Department = row.find("td").eq(2).html();
employee.Gender = row.find("td").eq(3).html();
employees.push(employee);
});
</script>
@*end of section script*@
<script type="text/javascript">
$.ajax({
type: "POST",
url: "/Employee/BulkUpdateOrInsert",
data: JSON.stringify(employees),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(r) {
alert(r + " record(s) inserted.");
}
});
</script>
</head>
<body>
<h2>BulkUpdateOrInsert</h2>
@using (Html.BeginForm("BulkUpdateOrInsert", "Employee", "POST"))
{
@Html.AntiForgeryToken()
<h4>Employee</h4>
<hr />
<table class="table" id="tblEmployees">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.City)
</th>
<th>
@Html.DisplayNameFor(model => model.Department)
</th>
<th>
@Html.DisplayNameFor(model => model.Gender)
</th>
<th></th>
</tr>
</thead>
@foreach (var item in Model)
{
<tbody>
<tr>
<td>@Html.HiddenFor(modelItem => item.EmployeeId)</td>
<td>
@Html.EditorFor(modelItem => item.Name)
</td>
<td>
@Html.EditorFor(modelItem => item.City)
</td>
<td>
@Html.EditorFor(modelItem => item.Department)
</td>
<td>
@Html.EditorFor(modelItem => item.Gender)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new {id = item.EmployeeId}) |
@Html.ActionLink("Details", "Details", new {id = item.EmployeeId}) |
@Html.ActionLink("Delete", "Delete", new {id = item.EmployeeId})
</td>
</tr>
</tbody>
}
</table>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" id="btnSave" value="Save All" class="btn btn-default" />
</div>
</div>
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
}
</body>
</html>
问题是,视图不加载更新记录。 我的要求是负载与SQL Server数据库中已有的数据视图。 编辑记录使用HTML.EditFor返回通用的列表更新记录- - >将其转换成数据表,并通过数据表存储过程。 (本我)。 问题是我不能加载视图更新数据库中的条目。 直接存储过程正在加载视图之前执行。
存储过程:
USE EMPLOYEE_Db GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
CREATE PROCEDURE [dbo].[BulkUpdateEmployee] @tblEmployeeType [dbo].[EmployeeType] READONLY AS BEGIN SET NOCOUNT ON; UPDATE dbo.EMPLOYEE SET Employee.Name=et.Name, Employee.City=et.City, Employee.Department=et.Department, Employee.Gender=et.Gender
FROM dbo.EMPLOYEE INNER JOIN @tblEmployeeType AS et ON dbo.EMPLOYEE.EmployeeId=et.EmployeeId
END
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。