将复选框int数组值赋给变量的问题

时间:2014-02-20 15:03:45

标签: c# asp.net-mvc jquery-bbq

我正在尝试为搜索结果实现过滤器。

这是一个允许用户选择其中一个选项的复选框。我遇到的问题是,当选择了多个选项时,模型无法正常工作。

我的预感是问题是通过viewModel传递的内容 如果选择了一个值,fiddler会告诉我beds=1已通过,而当选中多个复选框值时,则会传递beds[]=1&beds[]=2。是因为括号[]控制器无法绑定它。

以下更多详情

观点如下:

   <div>
    <input type="checkbox" name="beds" id="beds_1" value="1"  /><label for="beds_1">1</label>
    <input type="checkbox" name="beds" id="beds_2" value="2"  /><label for="beds_2">2</label>
    <input type="checkbox" name="beds" id="beds_3" value="3"  /><label for="beds_3">3</label>
    <input type="checkbox" name="beds" id="beds_4" value="4"  /><label for="beds_4">4</label>
    <input type="checkbox" name="beds" id="beds_5" value="5"  /><label for="beds_5">5+</label>
    </div>

这是viewModel的一部分,如下所示:

public class SearchFormViewModel 
{
   ...
   public int[] beds { get; set; }
}

当用户点击提交时 - 它通过ajax

进入搜索控制器
  private IEnumerable<Property> ProcessPropertySearch(SearchFormViewModel viewModelInp, int? page = null, int? ps = null) 
{
    var searchQuery = new SearchParameters {
        ...
        BedroomsCounts = viewModelInp.beds ?? new int[0],
        ...             
};

现在,我试图调试这个。

如果我没有为床选择任何过滤器,那么viewModelInp.beds = null&amp; BedroomCounts设置为int [0]。 如果我选择一个值,那么viewModelInp.beds = choosen-value&amp; BedroomCounts设置为int [选择值] 如果我选择多个值,那么由于某种原因,viewModelInp.beds在控制器中流动为null。

我也检查过使用fiddler。对于这种情况,当我选择多个值时,fiddler webform视图显示以下内容:

...
beds[]=1
beds[]=2
...

当选择多个值时,我不确定为什么viewModelInp.beds = null。

我使用jquery bbq来帮助为我的网址添加书签。

如果我直接为多选案例编写网址,即 www.domain.com/search#beds[]=1&beds[]=2 (or,www.domain.com/search#beds=1&beds=2) - 然后右侧复选框显示为“已选中”。但是,搜索仍然忽略它。

任何帮助都将不胜感激!感谢

---更新提出

我正在使用Jquery BBQ。和ajax是

$.post('/search/getproperties', $.param(model), function (response) {
 // show properties returned
}

上述情况中的$ .param(模型)等于beds[]=1&beds[]=2

2 个答案:

答案 0 :(得分:1)

我不认为模型绑定器喜欢它接收数据的格式。

  

你说:上述情况下的$ .param(模型)等于   床[] = 1&安培;床[] = 2

请求正文应该是:beds=1&beds=2减去[]

答案 1 :(得分:0)

正如预期的那样,问题是由于Jquery BBQ插件中$ .param的工作方式在post值中使用了[]。

我不确定是否有更好的方法可以做到但我在发布值之前基本上从$ .param(模型)中删除了[]

所以,

var postValues = $.param(model).replace(/\%5B\%5D/g,'')
$.post('/search/getproperties', postValues, function (response) {
 // show properties returned
}

如果你们觉得有更好的方法,请告诉我。谢谢!

---根据ED的评论更新

$.post('/search/getproperties', $.param(model, true), function (response) {
     // show properties returned
    }