Как обновить записи в представлении, а затем запустить хранимую процедуру для обновления фактических данных в базе данных?
У меня есть следующий метод действия контроллера.
public int BulkUpdate(List<Employee> 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 }
и этот метод вызывается в главном контроллере:
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] public JsonResult BulkUpdateOrInsert(List<Employee> 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>
Проблема заключается в том, что представление не загружается для обновления записей.
Мое требование состоит в том, чтобы загрузить представление с уже существующими данными в базе данных.
Отредактируйте записи,верните общий список обновленных записей - > преобразуйте их в Datatable и передайте этот datatable в хранимую процедуру.(это я уже сделал).Проблема в том, что я не могу загрузить представление для обновления записей в базе данных.
Что я уже пробовал:
Я понятия не имею, как подойти к этому вопросу.