在javascript中访问时,MVC Model属性未更新

时间:2016-08-10 09:05:58

标签: javascript c# asp.net-mvc asp.net-mvc-4

我在我的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 ...在这种情况下,有更好的方法来获取所选项吗?

2 个答案:

答案 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,您会发现这一点。

其他提示:

  • JavaScript通常使用与关键字相同的行上的左大括号(与Java一样),而不是下面的行(作为C#)。习惯使用@Html.Raw来表示JavaScript对象,而不是camelCase。您应该能够自定义JSON生成器以使用TitleCase,请参阅文档。
  • 布尔属性往往以camelCase为前缀,因此它将是Is(或者在camelCase中为IsSelected)。
  • 这不是最理想的:

    isSelected

    假设if( vehicles[i].Selected == "true" ) { 属性呈现为Javascript布尔值,您只需直接对其执行操作:

    Selected