Как передать идентификатор строки по ссылке href в mvc из представления в контроллер - PullRequest
0 голосов
/ 26 марта 2019

Я хочу передать идентификатор строки из представления в контроллер через ссылку href от datatable в mvc.

Вот мой datatable код дизайна

<table id="dataGrid" class="table table-striped table-bordered dt-responsive nowrap" width="100%" cellspacing="0">
    <thead>
        <tr>
            <th>N</th>
            <th>Date</th>
            <th>Action</th>
        </tr>
    </thead>
</table>

Вот код данных код действия

$(document).ready(function () {
    $("#dataGrid").DataTable({
        "processing": true, // for show progress bar
        "serverSide": true, // for process server side
        "pageLength": 5,
        "lengthMenu": [5, 10, 50, 100, 1000, 10000],

        "columnDefs":
        [{
            "targets": [0],
            "visible": false,
            "searchable": false,
            "orderable": false
        }
        ],
        "columns": [
            { "data": "id", "name": "Id", "autoWidth": true, "orderable": false },
            { "data": "date", "name": "Date", "autoWidth": true, "orderable": false, "format": "dd/MM/yyyy" },
                "render": function (data, type, row) {
                    return " <a href='/ServiceJob/GetPrintById?'" + row.id + "'' class='btn btn-success btn-lg glyphicon glyphicon-print'> Print </a> ";
                }
            },
        ]
    });
});

А вот и контроллер

[HttpPost]
public IActionResult GetPrintById(int id)
{
    ServiceJobModel model = new ServiceJobModel();

    // Service Job Detail
    var serviceJob = _Db.ServiceJob.Where(x => x.Id == id).FirstOrDefault();

    model.Id = serviceJob.Id;
    model.Date = serviceJob.Date;

    return View("Print");
}

Теперь в коде действия с датами я попытался получить ответ с помощью следующего кода

<a href='/ServiceJob/GetPrintById?'" + row.id + "'' class='btn btn-success btn-lg glyphicon glyphicon-print'> Print </a>

, но приведенный выше код не работает.

И вместо href , если я использовал actionlink , то в это время он показывает ошибкуто есть строка не существует в текущем контексте .

Вот код actionlink,

@Html.ActionLink("Print", "GetPrintById", "ServiceJob", new { id = row.id }, null)

Итак, для меня оба кода не выполняются.

Помогите мне решить эту проблему.

Спасибо.

1 Ответ

1 голос
/ 26 марта 2019

row является переменной на стороне клиента, и вы не можете использовать ее внутри @Html.ActionLink() помощника, который работает на стороне сервера.Вы можете добавить идентификатор строки с помощью помощника @Url.Action() и установить переменную, содержащую полный URL-адрес, в атрибут href тега привязки внутри параметра render:

"render": function (data, type, row) {
    var url = '@Url.Action("GetPrintById", "ServiceJob")/' + row.id; 

    return "<a href='" + url + "' class='btn btn-success btn-lg glyphicon glyphicon-print'>Print</a> ";
}

Обновление:

Обратите внимание, что тег привязки всегда использует GET-запрос для вызова пути действия контроллера, указанного в атрибуте href, поэтому атрибут [HttpPost] в действии контроллера должен быть опущен / удален:

public IActionResult GetPrintById(int id)
{
    ServiceJobModel model = new ServiceJobModel();

    // Service Job Detail
    var serviceJob = _Db.ServiceJob.Where(x => x.Id == id).FirstOrDefault();

    model.Id = serviceJob.Id;
    model.Date = serviceJob.Date;

    return View("Print");
}

Ссылка:

Таблица данных с помощью asp.net mvc, отображающая ссылки Url.actions / html.action со значениями маршрута

...