Как передать идентификатор из представления в модель представления в качестве параметра для функции GET?

Я создаю проект, используя MVC, knockoutJS, Web API, Bootstrap и т. Д., Используемая база данных - MSSQL Server 2012. Все работает очень хорошо, контроллеры правильно создали операции CRUD. Данные из БД отображаются в виде таблицы в пользовательском интерфейсе, каждая строка является интерактивной и открывает модальное окно, в котором отображаются данные об этом конкретном элементе. Проблема, с которой я столкнулся, заключается в невозможности передать определенное значение строки, в данном случае идентификатор, в ViewModel в качестве параметра для получения единственного результата в модальном режиме. Я могу сделать это вручную и указать какое-то значение в ViewModel, и данные будут отображаться, но я не могу отправить значение из View.

Вот код для ViewModel:

 var regionsModel = {
    regionId: ko.observable(),
    companyId: ko.observable(),
    name: ko.observable(),
    companyName: ko.observable()    
};

var regionsListModel = {
    regions: ko.observable()
};

function getRegions() {
    get(apiUrl + "Regions/GetRegions", {}, function (data) {
        regionsListModel.regions(data);
    });
}

function getRegion() {
    get(apiUrl + "Regions/GetRegion", { aiId: regionsModel.regionId() }, function (data) {
        regionsModel.regionId(data.RegionID);
        regionsModel.companyName(data.CompanyName);
        regionsModel.companyId(data.CompanyID);
        regionsModel.name(data.Name);
    });
}

function viewRegion() {
    $("#ViewRegionModal").modal('show');
    //regionsModel.regionId($('#ViewRegion').val());
    getRegion();
    return false;
}

Вот код для представления:

<table class="table table-striped table-bordered responsive" id="dtable">
                            <thead>
                                <tr>
                                    <th style="width: 20px;">ID</th>
                                    <th>Region Name</th>
                                    <th>Company Name</th>
                                </tr>
                            </thead>
                            <tbody data-bind="foreach: regionsListModel.regions">
                                <tr id="ViewRegion" data-toggle="modal" data-bind="click: viewRegion, value: RegionID">
                                    <td data-bind="text: RegionID"></td>
                                    <td data-bind="text: Name"></td>
                                    <td data-bind="text: CompanyName"></td>
                                </tr>
                            </tbody>
                        </table>

Параметр aiId предназначен для метода GetRegion в контроллере.

Это код для представления, в котором показаны данные для определенного элемента:

<table class="table table-striped" data-bind="with: regionsModel">
        <tbody>
            <tr>
                <th>Region ID:</th>
                <td><span data-bind="text: regionsModel.regionId"></span></td>
            </tr>
            <tr>
                <th>Region Name:</th>
                <td><span data-bind="text: regionsModel.name"></span></td>
            </tr>
            <tr>
                <th>Company Name:</th>
                <td><span data-bind="text: regionsModel.companyName"></span></td>
            </tr>
        </tbody>
    </table>

Любая помощь будет оценена по достоинству!


person Milan Stojanovic    schedule 17.09.2013    source источник
comment
Вы можете передать значение по URL-адресу и изменить маршрут для своего идентификатора?   -  person AthibaN    schedule 17.09.2013
comment
Не могли бы вы уточнить подробности? Извини, если я тебя слишком многого прошу.   -  person Milan Stojanovic    schedule 17.09.2013


Ответы (1)


Knockout добавляет текущий связанный объект в качестве первого аргумента при вызове обработчика событий. Второй аргумент - это объект события.

Итак, единственное, что вам нужно сделать, это добавить параметр в функцию viewRegion.

function viewRegion(region) {
    var regionID = region.RegionID;
    // get data
    return false;
}

Я надеюсь, что это помогает.

person Damien    schedule 17.09.2013
comment
Работает как шарм! :) Большое тебе спасибо!! - person Milan Stojanovic; 17.09.2013
comment
Еще одна вещь, это может быть немного не по теме, но следующая проблема, с которой я столкнулся, - это представление данных в таблице данных (я использую jquery.dataTables 1.9). Оператор foreach получает все данные и помещает их в таблицу, но также помещает строку Нет данных в таблице в конце результатов, а параметры сортировки и фильтрации не работают, они полностью очищают таблицу, как если бы таблица была пуста с самого начала. Заранее спасибо! - person Milan Stojanovic; 20.09.2013
comment
@Milan Stojanovic, вы могли бы создать новый вопрос, в который вы могли бы добавить дополнительную информацию и код. - person Damien; 20.09.2013