1

我有一个视图显示从 ViewModel 填充的用户列表。

    function MyUser(data) {
     this.Id = ko.observable(data.Id);
     this.phone = ko.observable(data.Phone);
     this.Company = ko.observable(data.Company);
     this.SelectedGrowerID = ko.observable(data.SelectedGrowerID);

     this.setSelectedClass = function (item, event) {
        $('#hfGrowerID').val(event.target.id);

      this.SelectedGrowerID = event.target.id;
    };
   }

    function UserListViewModel() {
    // Data
    var self = this;
    self.users = ko.observableArray([]);

    // Load initial state from server, convert it to MyUser instances, then  populate  self.users
    $.getJSON("UserList/GetAllUsers", function (allData) {
    var mappedUsers = $.map(allData, function (item) { return new MyUser(item) });
    self.users(mappedUsers);
    });

我有一个简单的表单,其中包含绑定到每个用户的公司的列表项。此外,我有一个隐藏字段,当单击每个列表项时,我将用户的 ID 保存到该字段中。

        <form action="UserList/Save" method="post">
          <ul id="UserList" data-bind="foreach: users" data-role="listview">
            <li data-bind="click: setSelectedClass"><a data-bind="attr: {id: Id}">
            <span data-bind="text: Company" /></a></li>
          </ul>

          <input id="hfGrowerID" type="hidden" />
          <input type="hidden" name="users" data-bind="value: ko.toJSON(users)" />

          <button type="submit">Save</button>
        </form>

在我的 UserListController 中,我想获取隐藏字段“hfGrowerID”的值。保存函数如下所示:

     <HttpPost()>
     Public Function Save(<FromJson()> users As IEnumerable(Of MyUserModel),
     hfGrowerID As String) As ActionResult
       'do stuff
       Return View ("Index", users)
     End Function

现在,问题是, hfGrowerID 没有任何价值,并且做 Request.Form("hfGrowerID") 也没有返回任何东西。我通过执行 alert 和 console.log 验证了 hfGrowerID 在单击列表项后正在获取一个值。

如何获取不属于我的 ViewModel 的隐藏字段的值?

非常感谢您的帮助。

4

1 回答 1

0

为什么不添加selectedGrowerId到您的 ViewModel?

如果您通过 AJAX 发布表单,您甚至不需要隐藏表单字段!

我猜这个setSelectedClass函数,当用户点击你的一个<li>标签时调用的函数,当前正在设置hfGrowerID隐藏表单字段的值?

相反,让该函数在 ViewModel 中设置 的值selectedGrowerId,并更改提交按钮,使其成为一个普通按钮,其click事件绑定到submitForm通过 AJAX 发布必要数据的函数。

更新: 对添加到问题的附加代码的回应

我敢打赌,你的推荐信this给你带来了麻烦。

尝试将您的MyUser功能更改为以下内容:

function MyUser(data) {
    var self = this;
    self.Id = ko.observable(data.Id);
    self.phone = ko.observable(data.Phone);
    self.Company = ko.observable(data.Company);
    self.SelectedGrowerID = ko.observable(data.SelectedGrowerID);

    self.setSelectedClass = function (item, event) {
        $('#hfGrowerID').val(event.target.id);
        self.SelectedGrowerID = event.target.id;
    };
}

尽管看起来我只是简单地替换thisself,但我相信函数this内部的含义与该setSelectedClass函数外部的值相比,this在 MyUser 函数中购买的值有所不同。

于 2012-09-11T23:53:19.320 回答