0

我正在尝试将 Model.property 映射到 Select2 插件的数据,但没有成功,在控制台中不断收到“TypeError:invalid 'in'operand result”。

public class Items{
    public int id;
    public string text;
};
public class Model{
    ...
    public Items[] arr { get; set; }
    ...
}

模型被传递给 Razor 局部视图,我的 jsScript 在那里发挥了一些作用

<script>
    $(document).ready(function(){
        $('#sel').select2({
            data: '@Model.arr',
            ...
    });
</script>

一切看起来都很好,直到我在选择框内单击以查看其中的项目。然后我得到了我之前提到的控制台错误。

解决我的问题:

// Changed the property of Model class to string.
public class Model{
    ...
    public string arr { get; set; }
    ...
}
  1. 在控制器-> 创建 IList 对象并用项目填充它。
  2. 在控制器-> 序列化列表对象并将其放入模型类的“arr”属性中。
  3. 在视图中 select2({ ... data: { results: eval('(@Html.Raw(Model.arr))') } ... })
4

1 回答 1

0

尝试将您的列表声明为 IList,我遇到了类似的问题并且它有效:

public IList<Items> arr { get; set; }

而且您有一个明显的错误,因为您没有指定要在框中显示的 id 和文本,例如:

.select2({
data:[
{id:0,text:'item1'},
{id:1,text:'item2'},
{id:2,text:'item3'},
{id:3,text:'item4'},
{id:4,text:'item5'}
]});

因此,您应该能够解决:

<script>
    $(document).ready(function(){
        $('#sel').select2({
             data:{ results: '@Model.arr', text: 'text' }, // 'text' is the name of you model property with your text
             formatSelection: format,
             formatResult: format
    });
function format(item) { return item.text; };
</script>

如果它不起作用,我建议您通过像官方文档一样声明一个测试数组来开始调试

var data=[{id:0,tag:'enhancement'},{id:1,tag:'bug'},{id:2,tag:'duplicate'},{id:3,tag:'invalid'},{id:4,tag:'wontfix'}];
function format(item) { return item.tag; };

$("#e10_2").select2({
data:{ results: data, text: 'tag' },
formatSelection: format,
formatResult: format
});

如果此代码不起作用,您将知道错误来自 Jquery 而不是您的代码

于 2012-08-21T12:30:29.010 回答