2013-05-24 3 views
0

Я работаю над 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.

Благодаря

+0

Вы можете оставить точно как выглядит строка DTO, часто это проблема. –

ответ

0
<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(); 
       id="{'DTO':'+ id +'}" **//This is change** 
       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); 
        } 
       }); 
      } 
     } 
    }); 
} 

}
Просто проверить мой код
ID = "{ 'DTO': '+ ID +'}" // Это изменить

+0

Жаль Халид. Решение не работает. – Partha

+0

URL: «Клиент/УдалитьCustomeByID /» + id, попробуйте этот. – Khalid

Смежные вопросы