将mvc3模型对象映射到select2插件数据

时间:2012-08-21 12:25:34

标签: c# asp.net-mvc-3 razor

我试图将Model.property映射到Select2插件的数据而没有运气,在控制台中不断获得“操作数结果”中的“TypeError:invalid”。

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

模型传递到Razor partialview,我的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. 在控制器中 - &gt;创建IList对象并用项填充它。
  2. 在控制器中 - &gt;序列化列表对象并将其放入Model类的“arr”属性中。
  3. 在视图中 选择2({     ...     data:{results:eval('(@ Html.Raw(Model.arr))')}     ... })

1 个答案:

答案 0 :(得分: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>

如果它不起作用,我建议您通过声明像official doc

这样的测试数组来开始调试
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而不是您的代码