【问题标题】:How do I pass an ID from View to the ViewModel as a parameter for GET function?如何将 ID 从 View 传递到 ViewModel 作为 GET 函数的参数?
【发布时间】:2013-09-21 19:55:44
【问题描述】:

我正在使用 MVC、knockoutJS、Web API、Bootstrap 等创建项目,使用的数据库是 MSSQL Server 2012。一切运行良好,控制器已正确创建 CRUD 操作。来自 DB 的数据显示在 UI 的网格表中,每一行都是可点击的,并打开一个模式,其中显示有关该确切元素的数据。我遇到的问题是无法将行的某个值(在本例中为 ID)作为参数传递给 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参数用于Controller中的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>

任何帮助将不胜感激!

【问题讨论】:

  • 你可以通过url传递值并修改你的ID的路由?
  • 您能详细说明一下吗?对不起,如果我问你太多了。

标签: asp.net-mvc knockout.js asp.net-web-api asp.net-mvc-viewmodel


【解决方案1】:

Knockout 在调用事件处理程序时将当前绑定的对象添加为第一个参数。 第二个参数是事件对象。

所以你唯一需要做的就是给 viewRegion 函数添加一个参数。

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

希望对你有帮助。

【讨论】:

  • 像魅力一样工作! :) 非常感谢!!
  • 还有一件事,可能有点离题,但我遇到的下一个问题是数据表中数据的表示(我使用的是 jquery.dataTables 1.9)。 foreach 语句获取所有数据并将其放入表中,但它还在结果末尾放置了一行“表中没有数据”,并且排序和过滤选项不起作用,它们完全清空表,就像如果表是空的。提前致谢!
  • @Milan Stojanovic,您应该创建一个新问题,您可以在其中添加更多信息和代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多