繁体   English   中英

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

[英]Issue with assigning checkbox int array values to variable

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

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

我的直觉是问题在于通过viewModel传递的内容如果选择了一个值,则提琴手向我展示了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],
        ...             
};

现在,我尝试调试它。

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

我也检查过提琴手。 对于这种情况,当我选择多个值时,提琴手网络表单视图显示以下内容:

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

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

我使用了jQuery烧烤来帮助为我的网址添加书签。

如果我直接为多个选择情况写网址,即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(model)等于beds[]=1&beds[]=2

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

您说:在上述情况下,$ .param(model)等于bed [] = 1&beds [] = 2

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM