我在我的cshtml文件中有这个:
@for (var i = 0; i < Model.Vehicles.Count; i++){
@Html.CheckBoxFor(m => Model.Vehicles[i].Selected)}
基本上Model.Vehicles是一个车辆列表,并且Selected属性是一个bool ......
我有一个按钮,当点击时,调用此功能:
function delSel(){
var vehicles = '@Html.Raw(Json.Encode(Model.Vehicles))';
var selIDs = "";
for(var i = 0; i < vehicles.length; i ++)
{
if (vehicles[i].Selected == "true") {
selIDs = selIDs + vehicles[i].ID + ",";
}
}
document.getElementById('CRVehicleIDs').value = selIDs;
}
我的问题是,尽管选中了Checkbox,但Selected属性的值总是等于false ...在这种情况下,有更好的方法来获取所选项吗?
答案 0 :(得分:1)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea></textarea>
<button>Submit</button>
这不会像您期望的那样工作,剃刀语法呈现在服务器端,这意味着当用户点击复选框时,它的值不会更新。
但是,当您创建复选框时,可以使用{for循环中的var vehicles = '@Html.Raw(Json.Encode(Model.Vehicles))';
变量为其提供ID。
i
然后你可以用for循环遍历你的复选框。
@Html.CheckBoxFor(m => Model.Vehicles[i].Selected, new { id = "checkbx_" + i })
答案 1 :(得分:0)
您将@Test
public void testGetBalanceForPerson() {
//creating mock person
Person person1 = mock(Person.class);
when(person1.getId()).thenReturn("mockedId");
//calling method under test
try{
myClass.getBalanceForPerson(person1);
}
catch(Exception e){
fail("Should not have thrown any exception");
}
}
渲染为JSON,然后在Javascript单引号中呈现 - 这可能会导致在浏览器中访问时出现无效的Javascript语法,因为JSON对象属性名称也用引号括起来。
删除this.Model.Vehicles
周围的引号。
如果您查看页面的呈现HTML并且发现语法错误中会包含大部分HTML,您会发现这一点。
其他提示:
@Html.Raw
来表示JavaScript对象,而不是camelCase
。您应该能够自定义JSON生成器以使用TitleCase
,请参阅文档。camelCase
为前缀,因此它将是Is
(或者在camelCase中为IsSelected
)。这不是最理想的:
isSelected
假设if( vehicles[i].Selected == "true" ) {
属性呈现为Javascript布尔值,您只需直接对其执行操作:
Selected