我试图从ASP.NET webpages_Membership表中将IsConfirmed字段绑定到复选框,使用Knockout JS并且似乎无法获取它工作。如何绑定与ASP.NET MVC和Knockout JS的复选框的真/假值
我把它绑定到复选框,但是除非我将它设置为!$ data.IsConfirmed,否则复选框不会被检查。我还挂钩了一个点击事件来触发我的视图模型中的updateUser函数,它会更新它,但不会切换发送的值。它总是发送true,如果复选框被选中,它应该发送true,否则为false,然后取消选中复选框。
这里是我的标记
<table id="usersTable" class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>User ID</th>
<th>Username</th>
<th>Role</th>
<th>Date Created</th>
<th>Last Failed Login</th>
<th>Active</th>
</tr>
</thead>
<tbody data-bind="foreach: users">
<tr>
<td>
<span data-bind="text: $data.UserId"></span>
</td>
<td>
<span data-bind="text: $data.Username"></span>
</td>
<td>
<span data-bind="text: $data.Role"></span>
</td>
<td>
<span data-bind="text: $data.DateCreated"></span>
</td>
<td>
<span data-bind="text: $data.LastFailedLogin"></span>
</td>
<td>
<input type="checkbox" data-bind="click: updateUser, checked: $data.IsConfirmed" />
</td>
</tr>
</tbody>
</table>
和JavaScript
<script type="text/javascript">
var baseUri = '@ViewBag.ApiUrl';
var self = this;
self.users = ko.observableArray();
// define user view-model
function UsersViewModel() {
// get users to populate the view model
$.getJSON(baseUri, self.users);
// update the users IsConfirmed status
self.updateUser = function (user) {
$.ajax({ type: "PUT", url: baseUri + '/' + user.UserId, data: user });
}
// re-load the users after any modifications
$.getJSON(baseUri, self.users);
};
$(document).ready(function() {
ko.applyBindings(new UsersViewModel());
});
</script>
JSON从服务器
[{
"UserId": 6,
"Username": "[email protected]",
"Role": "Guest",
"DateCreated": "11/12/2012 1:18:41 PM",
"LastFailedLogin": "",
"IsConfirmed": false
}, {
"UserId": 3,
"Username": "simpleuser",
"Role": "Administrator",
"DateCreated": "11/11/2012 6:17:32 PM",
"LastFailedLogin": "",
"IsConfirmed": false
}, {
"UserId": 2,
"Username": "testUser",
"Role": "Administrator",
"DateCreated": "11/11/2012 6:17:32 PM",
"LastFailedLogin": "",
"IsConfirmed": false
}, {
"UserId": 5,
"Username": "[email protected]",
"Role": "Student",
"DateCreated": "11/12/2012 3:31:38 AM",
"LastFailedLogin": "",
"IsConfirmed": false
}, {
"UserId": 8,
"Username": "[email protected]",
"Role": "Alumni",
"DateCreated": "11/12/2012 1:24:15 PM",
"LastFailedLogin": "",
"IsConfirmed": false
}, {
"UserId": 9,
"Username": "[email protected]",
"Role": "Applicant",
"DateCreated": "11/12/2012 1:25:18 PM",
"LastFailedLogin": "",
"IsConfirmed": false
}, {
"UserId": 1,
"Username": "user1",
"Role": "Administrator",
"DateCreated": "11/11/2012 6:17:31 PM",
"LastFailedLogin": "11/12/2012 4:54:51 PM",
"IsConfirmed": false
}, {
"UserId": 4,
"Username": "[email protected]",
"Role": "Alumni",
"DateCreated": "11/11/2012 6:22:23 PM",
"LastFailedLogin": "11/11/2012 8:23:57 PM",
"IsConfirmed": false
}, {
"UserId": 7,
"Username": "[email protected]",
"Role": "Student",
"DateCreated": "11/12/2012 1:23:56 PM",
"LastFailedLogin": "",
"IsConfirmed": false
}]
C#的Web API控制器
// GET api/Membership
public IEnumerable<SiteMemberDTO> GetMemberships()
{
var users = db.webpages_Membership.AsEnumerable();
var profiles = db.UserProfiles.AsEnumerable();
// now build our DTO object
var membersList = new List<SiteMemberDTO>();
foreach (var profile in profiles)
{
var member = new SiteMemberDTO() {
UserId = profile.UserId,
Username = profile.UserName,
Role = profile.webpages_Roles.SingleOrDefault(r => r.RoleName != "").RoleName,
DateCreated = db.webpages_Membership.Find(profile.UserId).CreateDate.ToString(),
LastFailedLogin = db.webpages_Membership.Find(profile.UserId).LastPasswordFailureDate.ToString()
};
membersList.Add(member);
}
return membersList;
}
DTO(数据传输,对象)
public class SiteMemberDTO
{
public int UserId { get; set; }
public string Username { get; set; }
public string Role { get; set; }
public string DateCreated { get; set; }
public string LastFailedLogin { get; set; }
public bool IsConfirmed { get; set; }
}
这是我在做什么的完整代码。出于某种原因,我在JSON中看到,它在IsConfirmed中返回false,在数据库中它对于每条记录都为真。
你能展示更多的标记吗?您必须在我所设想的某个时间点迭代用户? –
用完整的标记更新它。 –
javascript对象上的'IsConfirmed'属性实际上是一个布尔值,而不是字符串值? –