ASP.NET и jQuery - массовое обновление данных

Я работаю с ASP.NET и jQuery. Я пытаюсь выполнить массовое обновление данных при фокусировке (когда кто-то перемещается из одного поля ввода в другое, обновляет данные из поля ввода, из которого пользователь только что сделал вкладку)

Вот мой HTML-код одной из множества строк:

<tr>
   <td><input type='text' name='ID' value='345924' /></td>
   <td><input type='text' name='carNo' value='1' /></td>
   <td><input type='text' name='BuyerName' value='Steve' /></td>
   <td><input type='text' name='BuyDate' value='3/15/2016' /></td>
   <td><input type='text' name='Description' value='Steve payment went through' /></td>
   <td><input type='text' name='amount' value='' /></td>
   <td><input type='text' name='payedSoFar' value='73501.71' /></td>
   <td><input type='text' name='lastPaid' value='2/19/2016' /></td>
   <td><input type='text' name='notified' value='s' /></td>
   <td><input type='text' name='notifiedDate' value='2/22/2016' /></td>
   <td><input type='text' name='issues' value='' /></td>
   <td><input type='text' name='issueDate' value='' /></td>
   <td><input type='text' name='Notes' value='' /></td>
</tr>

Вот мой код jQuery с акцентом на вызов API для обновления:

$("input[type=text]").on("focusout", function () {

        $.ajax({
            url: "/api/Action/updateCarInfo",
            type: "GET",
            error: function (request, status, error) {
            },
            success: function (data) {
            }
        });

    });

и вот мой ASP.NET API контроллер я звоню:

[ResponseType(typeof(void))]
        public IHttpActionResult updateCarInfo(int id, carClass cars)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            if (id != cars.ID)
            {
                return BadRequest();
            }

            db.Entry(cars).State = EntityState.Modified;

            db.SaveChanges();

            return StatusCode(HttpStatusCode.NoContent);
        }

Итак, мой вопрос: как передать данные столбца, из которого я только что выделил вкладку, а также передать идентификатор из первого столбца? Или мне нужно передать всю строку данных, даже если она не изменилась?

2 ответа

$(this).val() предоставит вам значение поля, которое запустило функцию, чтобы покрыть получение значения соответствующего поля.

Что касается передачи идентификатора, есть несколько способов приблизиться к нему. Один из способов - использовать что-то вроде:

$(this).closest("tr").find("input[name=ID]").val();

Это переместит DOM к родительскому tr найдите в нем поле идентификатора и укажите его значение.

Альтернатива для отправки всей строки:

<form action="/api/Action/updateCarInfo">
    <table>
        <tr>
           <td><input type="text" name="ID" value="345924" /></td>
           <td><input type="text" data-id="345924" name="carNo" value="1" /></td>
           <td><input type="text" name="BuyerName" value="Steve" /></td>
           <td><input type="text" name="BuyDate" value="3/15/2016" /></td>
           <td><input type="text" name="Description" value="Steve payment went through" /></td>
           <td><input type="text" name="amount" value="" /></td>
           <td><input type="text" name="payedSoFar" value="73501.71" /></td>
           <td><input type="text" name="lastPaid" value="2/19/2016" /></td>
           <td><input type="text" name="notified" value="s" /></td>
           <td><input type="text" name="notifiedDate" value="2/22/2016" /></td>
           <td><input type="text" name="issues" value="" /></td>
           <td><input type="text" name="issueDate" value="" /></td>
           <td><input type="text" name="Notes" value="" /></td>
        </tr>
    </table>
</form>

Ты можешь использовать $(this).closest("form").submit() чтобы найти родительскую форму для строки и отправить ее.

Почему бы не использовать измененное событие. Вы должны активировать это получение только тогда, когда вы действительно внесли изменения в свои данные. Я также рекомендовал бы назначить класс для строки или входных данных.

<table>
    <tr class='my-custom-class'>
       <td><input type="text" name="ID" value="345924" /></td>
       ...
    </tr>
</table>

Это позволит вам обрабатывать ваше событие на уровне строк.

$('.my-custom-class input').change(function () {
    $.ajax({
        url: "/api/Action/updateCarInfo",
        type: "GET",
        data: $(this).parent().parent ().find('input').serialize(),
        error: function (request, status, error) {

        },
        success: function (data) {

        }
    });
});

Я использую метод serialize, потому что мы можем сериализовать всю строку в строку запроса для вашего запроса get.

ID=345924&carNo=1&...

Вы можете легко получить идентификатор отдельно, если вам нужно реорганизовать ваши данные в строке запроса. Я использовал только сериализацию, так как это упростит задачу, но если это неправильно для маршрутизации метода контроллера, дайте мне знать.

var id = $(this).parent().parent().find('data-id').attr('data-id');

//OR

var id = $(this).parent().parent().find('[name="carNo"]').data('id');

Дайте мне знать, если есть проблема с этим решением. Был бы рад разместить.

Другие вопросы по тегам