将复选框int数组值分配给变量时出现问题



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

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

我的直觉是,问题是通过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>

这是视图模型的一部分,如下所示:

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=选择值&BedroomCounts设置为int[选择值]如果我选择多个值,那么由于某种原因,viewModelInp.beds在控制器中以null形式流动。

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

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

我不知道为什么在选择多个值时viewModelInp.beds为null。

我已经使用jquery bbq来帮助书签我的url。

如果我直接为多选情况编写url,即。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

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

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

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

不出所料,该问题是由于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
}

相关内容

  • 没有找到相关文章

最新更新