C# 如何使用ASP.NET MVC和Knockout JS将真/假值绑定到复选框
我正在尝试使用敲除JS将ASP.NET webpages_成员表中的IsConfiged字段绑定到复选框,但似乎无法使其正常工作 我将其绑定到复选框,但除非我将其设置为$data.Is已确认,复选框未选中。我还连接了一个click事件,在我的视图模型中启动了updateUser函数,它会更新它,但不会切换发送的值。它总是发送true,如果选中复选框,则应发送true,否则为false,然后取消选中复选框 这是我的标记C# 如何使用ASP.NET MVC和Knockout JS将真/假值绑定到复选框,c#,javascript,knockout.js,asp.net-mvc-4,C#,Javascript,Knockout.js,Asp.net Mvc 4,我正在尝试使用敲除JS将ASP.NET webpages_成员表中的IsConfiged字段绑定到复选框,但似乎无法使其正常工作 我将其绑定到复选框,但除非我将其设置为$data.Is已确认,复选框未选中。我还连接了一个click事件,在我的视图模型中启动了updateUser函数,它会更新它,但不会切换发送的值。它总是发送true,如果选中复选框,则应发送true,否则为false,然后取消选中复选框 这是我的标记 <table id="usersTable" class="table
<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>
C#Web API控制器
[{
"UserId": 6,
"Username": "john@jdoe.com",
"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": "jdoe1@nowhere.com",
"Role": "Student",
"DateCreated": "11/12/2012 3:31:38 AM",
"LastFailedLogin": "",
"IsConfirmed": false
}, {
"UserId": 8,
"Username": "nobody@somewhere.com",
"Role": "Alumni",
"DateCreated": "11/12/2012 1:24:15 PM",
"LastFailedLogin": "",
"IsConfirmed": false
}, {
"UserId": 9,
"Username": "test@test.com",
"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": "test@test.com",
"Role": "Alumni",
"DateCreated": "11/11/2012 6:22:23 PM",
"LastFailedLogin": "11/11/2012 8:23:57 PM",
"IsConfirmed": false
}, {
"UserId": 7,
"Username": "test@test2.com",
"Role": "Student",
"DateCreated": "11/12/2012 1:23:56 PM",
"LastFailedLogin": "",
"IsConfirmed": false
}]
// 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;
}
这是我正在做的事情的完整代码。由于某种原因,我在JSON中看到,对于IsConfirmed,它返回false,而在数据库中,对于每个记录,它都是true。我看到,在创建DTO对象时,您没有分配IsConfirmed。这就是为什么它总是假的
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(),
IsConfirmed = profile.IsConfirmed
};
编辑:
复选框和单击事件似乎有问题:
因此,不要单击,而是使用更改事件:
data-bind="checked: IsConfirmed, event: { change: $parent.updateUser}"
签出此提琴:您可以显示更多的标记吗?我猜您一定是在某个时候对用户进行了迭代?用完整的标记对其进行了更新。javascript对象上的
IsConfirmed
属性实际上是布尔值而不是字符串值吗?它是使用ASP.NET的SimpleMembership提供程序创建的webpages\u成员表中的一个位列。在我的DTO(数据传输对象)中,它位于一个布尔字段中,在json中返回true或false?因为你的代码看起来很好…很好的捕捉!谢谢:)修复了返回false的值,但是现在我需要知道为什么当您单击复选框时,它不会取消检查/重新检查,并且它总是在updateUser javascript函数中将值true发送到服务器。它需要根据检查状态更改其值,然后使用该值调用updateUser函数。正在尝试更新状态字段以激活和取消激活用户。谢谢你的帮助。:)
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(),
IsConfirmed = profile.IsConfirmed
};
data-bind="checked: IsConfirmed, event: { change: $parent.updateUser}"