Datatable: нажатие на кнопку не открывает вид - PullRequest
0 голосов
/ 20 марта 2020

У меня есть таблица данных, которая правильно отображает обзорные данные. Я добавил кнопку, которая должна go к моему контроллеру, и оттуда откройте новый вид, отображающий детали выбранной строки.

Щелчок работает, я прихожу к методу на моем контроллере. Но мое представление сведений не открывается.

Это мой javascript:

$("#search-logs tbody").on('click', 'button', function () {
    var self = this;
    var tr = $(self).closest('tr');
    var dtRow = datatable.row(tr[0]);
    var rowData = dtRow.data();
    var processId = rowData[0];

    $.get("@Url.Action("Details","Logs")", { id: processId });
});

И это код в моем контроллере:

[HttpGet]
public ActionResult Details(int id)
{
    return View();
}

Может кто-нибудь подскажет что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 20 марта 2020

Вы можете попробовать:

$("#search-logs tbody").on('click', 'button', function () {
   var self = this;
   var tr = $(self).closest('tr');
   var dtRow = datatable.row(tr[0]);
   var rowData = dtRow.data();
   var processId = rowData[0];
   location.href = '@Url.Action("Details","Logs")?id='+ processId;  
});
1 голос
/ 20 марта 2020

Проблема с вашим кодом в том, что вы вызываете функцию ajax get, которая возвращает представление вместо простого HTTP-ответа. Чтобы отобразить это представление, вам нужно перенаправить страницу на этот URL-адрес, вместо выполнения запроса ajax.

$("#search-logs tbody").on('click', 'button', function () {
    var self = this;
    var tr = $(self).closest('tr');
    var dtRow = datatable.row(tr[0]);
    var rowData = dtRow.data();
    var processId = rowData[0];

    location.href = '@Url.Action("Details","Logs")?id='+ processId;
});

Также, если вы все еще хотите использовать запрос get, в основном, чтобы проверить, существует ли идентификатор как это может вернуть 404 Не найдено, вы можете ajax функция, как это,

$("#search-logs tbody").on('click', 'button', function () {
    var self = this;
    var tr = $(self).closest('tr');
    var dtRow = datatable.row(tr[0]);
    var rowData = dtRow.data();
    var processId = rowData[0];

    $.get("@Url.Action("Details","Logs")", { id: processId }, 

    function(data, statusText, xhr){
     if(xhr.status == 200) location.href = '@Url.Action("Details","Logs")?id='+ processId;
    else alert('Sorry, this id does not exist');
    });
});
0 голосов
/ 20 марта 2020

Вы можете открыть созданную ссылку в новом окне или загрузить в текущем окне // открывается в новом окне window.open(newUrlCreated, '_blank');

// открывается в текущем окне

  1. window.open(xhr.data);
  2. window.location.href=newUrlCreated;

    there are a lot of ways to achieve that.
    You can add an onclick="operate(row['info'], row['info'])" to your button which calls a function with specified data 
    from the datatable row, you will not bother to search for clicked button and row. 
    
function operate(selectedRow, data, ...){
//logic of button for row
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...