Estoy agregando datos dinámicamente a la base de datos usando AJAX y mostrándolos usando el bucle foreach en MVC, también he agregado un botón para eliminar esos datos usando la llamada ajax.

Código HTML / MVC:

<div id="divaddrules" class="form-group row">
   @try
      {
         foreach (var item in ViewBag.AdditionalRules)
           {
             <div class="col-sm-10">
                <p style="font-size:large">@item.AdditionalDesc</p>
             </div>
             <div class="col-sm-2">
                <input type="button" onclick="Removeinput(@item.id)" class="text-dark" style="border:none; background-color:transparent" value="X" />
              </div>
            }
       }
       catch (Exception ex){ }

</div>

Ahora cuando hago clic en el botón Eliminar, llama al siguiente código JS:

function Removeinput(id) {
        var datas = {};
            datas.addId = id
        $.ajax({
            url: "/Rooms/RemoveAdditionalRules",
            type: "GET",
            data: datas,
            success: function (result) {
               alert(result.id);
               $("#divaddrules").load(window.location.href + " #divaddrules");
            },
            error: function (result) {
                alert("Error: " + result.status);
           }
        });
}

Y su paso a este controlador:

[HttpGet]
[Authorize]
public ActionResult RemoveAdditionalRules(int addId)
{
     HouseRules rules = db.HouseRules.Find(addId);
     db.HouseRules.Remove(rules);
     db.SaveChanges();

     return Json(JsonRequestBehavior.AllowGet);
}

Recibo un error 500 en un error de llamada ajax.

¿Alguien puede decirme dónde lo estoy haciendo mal? Por favor ... estoy atrapado aquí.

Actualizar: Captura de pantalla adjunta: Captura de pantalla de depuración

0
Gautam Sharma 17 sep. 2018 a las 09:15

3 respuestas

La mejor respuesta

Escriba su función Removeinput de la siguiente manera:

function Removeinput(id) {
        $.ajax({
            url: "/Rooms/RemoveAdditionalRules",
            type: "GET",
            data: { addId : id},
            success: function (response) {
               alert(response);
               $("#divaddrules").load(window.location.href + " #divaddrules");
            },
            error: function (result) {
                alert("Error: " + result.status);
           }
        });
}

Luego, en el método del controlador:

[HttpGet]
[Authorize]
public ActionResult RemoveAdditionalRules(int addId)
{
     AdditionalRules rules = db.AdditionalRules.Find(addId); // Here was the problem. He was pointing to the wrong table that has fixed over team viewer.
     db.AdditionalRules.Remove(rules);
     db.SaveChanges();

     return Json(addId,JsonRequestBehavior.AllowGet);
}
0
TanvirArjel 17 sep. 2018 a las 07:26

El problema es que faltan valores en db, en la imagen le pide id 25 pero devuelve nulo e intenta eliminar un elemento que pasa un valor nulo.

Entonces, en su caso, debe validar antes de eliminar o corregir los datos faltantes:

[HttpGet]
[Authorize]
public ActionResult RemoveAdditionalRules(int addId)
{
     HouseRules rules = db.HouseRules.Find(addId);

If(rules == null)
{
  //return error msg.
  return Json(JsonRequestBehavior.AllowGet);
}
     db.HouseRules.Remove(rules);
     db.SaveChanges();

     return Json(JsonRequestBehavior.AllowGet);
}
0
HudsonPH 17 sep. 2018 a las 07:11

Envíe su tipo de entrada, puede ser útil

function deleterelation(id) {
    debugger;
    if (id > 0)
        $.ajax({
            url: "/Relations/Delete/" + id,
            type: "get",
            datatype: "json",
            data: { id: id },
            success: function (response) {
                debugger;
                if (response != null) {
                    

                    $("#txtDName").text(response.name);
                    $("#DRelationId").val(response.id);
                    $("#DeleteRelation").modal("show");
                }
            },
            error: function (response) {

                $("#DeleteRelationLoading").hide();
                $("#DeleteRelation_btn_cancel").show();
                $("#DeleteRelation_btn_save").show();
            }
        });
    else
        toastr.error("Something went wrong");
}
<input type="submit" onclick="Removeinput(@item.id)" class="text-dark" style="border:none; background-color:transparent" value="X" />

Si esto no funciona por favor hágamelo saber

-1
Muhammad Abdullah 17 sep. 2018 a las 07:05