0

Model.property を Select2 プラグインのデータにマッピングしようとしていますが、うまくいきません。コンソールに「TypeError: 無効な 'in' オペランド結果」が表示され続けます。

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

モデルは、jsScript がいくつかの魔法を行う Razor 部分ビューに渡されます

<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. コントローラーで->リストオブジェクトをシリアル化し、Modelクラスの「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 に答える