0

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

这是一个复选框,允许用户选择多个选项之一。The issue I am having is that the model does not work properly when more than one option is selected.

My hunch is that the issue is what is being passed via the viewModel If one value is selected fiddler shows me that beds=1is passed whereas when multiple values of checkbox are selected then beds[]=1&beds[]=2is passed. 是不是因为括号 [] 控制器无法绑定它。

更多详情如下

观点如下:

   <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 & BedroomCounts 设置为 int[0]。如果我选择一个值,则 viewModelInp.beds = choosen-value & BedroomCounts 设置为 int[choosen-value] 如果我选择多个值,则出于某种原因 viewModelInp.beds 在控制器中作为空值流动。

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

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

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

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

如果我直接为多选情况编写 url,即 www.domain.com/search#beds[]=1&beds[]=2 (or,www.domain.com/search#beds=1&beds=2) - 那么正确的复选框显示为“已选中”。但是,搜索仍然忽略它。

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

--- 按要求更新

我正在使用 Jquery 烧烤。而ajax是

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

上述情况下的 $.param(model) 等于beds[]=1&beds[]=2

4

2 回答 2

1

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

你说:上面例子中的$.param(model)等于beds[]=1&beds[]=2

请求正文实际上应该是beds=1&beds=2[]

于 2014-02-20T20:50:20.857 回答
0

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

我不确定是否有更好的方法来做到这一点,但我基本上在发布值之前从 $.param(model) 中删除了 [] 并且它有效

所以,

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
    }
于 2014-02-20T20:50:24.193 回答