Я работаю над MVC3 и пытается передать представление формы значений контроллеру с помощью JQuery и JSON. Запрос извлекает значения флажков внутри сетки. Ниже приведен кодОтправка значения через Jquery показывает нуль
<script type="text/javascript">
function DeleteCustomer() {
if (confirm("Are you sure to delete records")) {
$('#myGrid table tr').each(function() {
if ($(this).find("input[id*='assignChkBx']").length > 0) {
if ($(this).find("input[id*='assignChkBx']")[0].checked == true) {
//var CustID = $(this).find("input[id*='assignChkBx']").attr("CustomerID");
var id = $(this).find("input[id*='assignChkBx']").val();
var DTO = JSON.stringify(id);
alert(DTO); **//Showing right value**
var temp = $(this);
$.ajax({
url: "Customer/DeleteCustomeByID",
type: "POST",
dataType: "json",
data: DTO,
contentType: 'application/json',
success: function (data) {
alert('Success');
},
error: function (xhr, textStatus, err) {
alert('Error :(' + err);
}
});
}
}
});
}
}
Над 'DTO' является флажок значение, которое дает правильное значение.
Ниже мой HTML
<input type="button" id="btnDelete" value="Delete" title="Delete" onclick="DeleteCustomer()" style="color:steelblue"/>
<div id="myGrid" style="width:100%">
@*@Html.Partial("_grid", Model)*@
@{
WebGrid grid = new WebGrid(Model, rowsPerPage: 15, ajaxUpdateContainerId: "myGrid");
}
@grid.GetHtml(
//htmlAttributes: new { id = "myGrid1" },
fillEmptyRows: false,
alternatingRowStyle: "alternate-row",
headerStyle: "grid-header",
footerStyle: "grid-footer",
mode: WebGridPagerModes.All,
firstText: "<< First",
previousText: "< Prev",
nextText: "Next >",
lastText: "Last >>",
columns: new[] {
grid.Column(header: "", format: @<text><input class="check-box" type="checkbox" id="assignChkBx" value="@item.CustomerID" /></text>),
//grid.Column(header: "", format: @<text>@Html.CheckBox("assignChkBx") </text>),
grid.Column("CustomerID", "CustomerID", canSort: true, style: "CustomerID"),
grid.Column("CompanyName", "Company Name", canSort: true, style: "CompanyName"),
grid.Column("ContactName", "Contact Name", canSort: true, style: "ContactName"),
grid.Column("Address", "Address", canSort: false, style: "Address"),
grid.Column("City", "City", canSort: true, style: "City"),
grid.Column("",
header: "Actions",
format: @<text>
@Html.ActionLink("Edit", "Edit", new { id=item.CustomerID})
@Html.ActionLink("Delete", "Delete", new { id=item.CustomerID})
</text>
)
})
Проблема возникает, когда я передавая значение с точки зрения к контроллеру. Пожалуйста, просмотрите следующий код:
//Delete multiple Customers by CustomeByID
[HttpPost]
public ActionResult DeleteCustomeByID(string DTO)
{
try
{
// delete the record from ID
Customer customer = db.Customers.Find(DTO);
db.Customers.Remove(customer);
db.SaveChanges();
return RedirectToAction("Index");
//return View(customer);
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Class: {0}, Property: {1}, Error: {2}",
validationErrors.Entry.Entity.GetType().FullName,
validationError.PropertyName,
validationError.ErrorMessage);
}
}
throw new Exception();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
Здесь произошли две ошибки.
i. Переменная DTO имеет значение «null»
ii. Когда «db.Customers.Remove (клиент); Выполнение инструкции: Я получаю следующую ошибку.
Значение не может быть пустым. Имя параметра: предприятие
Я не могу понять, почему эти ошибки происходят. Оператор Remove работает отлично, когда параметры передаются без JQuery.
Я использую базу данных Northwing.
Благодаря
Вы можете оставить точно как выглядит строка DTO, часто это проблема. –