asp.net mvc3 c#复选框,没有绑定到数据库

时间:2012-09-09 18:16:42

标签: asp.net-mvc-3 entity-framework c#-4.0 checkbox

我在我的视图中使用了这些复选框:

<input type="checkbox" value="1" name="reglist" id="prueba2" />
<input type="checkbox" value="2" name="reglist" id="prueba3" />

我正在使用实体框架,而我的viewModel表不包含这些复选框的值。

我需要在控制器中检查复选框,并保留先前在请求中检查的复选框,而不将chexbox绑定到类。

2 个答案:

答案 0 :(得分:1)

为了让我们说同一种语言,我通常将我在数据库中保存的内容称为“模型”,并将我在视图中用作模型的内容称为“视图模型”。

在那,我会有一个模型:

public class Person{
   // properties
}

然后我会像这样有一个视图模型

public class PersonViewModel{
   public Person Person { get; set; }
   public bool OtherNeededValue1 {get; set;}
   public bool OtherNeededValue2 {get; set;}
}

现在,在您的视图中,用户PersonViewModel作为模型。然后,在您的控制器中,您的操作将如下所示:

public ActionResult Create (PersonViewModel viewModel)
{
     if (viewModel.OtherNeededValue1)
     {
         // do something
     }

     var p = new Person { 
                          FirstName = viewModel.Person.FirstName 
                        };

}

这样您就不会使用不必要的属性来模拟您的模型,但您仍然可以利用MVC的丰富绑定。

干杯。

答案 1 :(得分:0)

每次单击复选框时,您都可以向控制器发出AJAX调用。

Ajax Call

    $(function () {
        $(':checkbox').change(function () {
            $.ajax({
                url: '@Url.Action("CheckBoxStatus")',
                type: 'POST',
                data: { isChecked: $(this).is(':checked'),
                        id: $(this).val()
                },
                success: function (result) { }
            });
        });
    });

这会将复选框的状态和值发送给控制器,您可以以任何方式存储信息。

控制器方法

public void CheckBoxStatus(bool isChecked, int id)
{
   // Do what you like here 
}