2

在我看来,我有这个 Select2 输入框充当标签控制器:

CSHTML

<input id="tagSelector" type="hidden" style="width: 300px"/>

JS

  $('#tagSelector').select2({
            placeholder: 'Select a tag...',
            multiple: true,
            ajax: {
                url: '@Url.Action("SearchTags", "UnitDetails")',
                dataType: 'json',
                data: function(term, page) {
                    return {
                        searchTerm: term
                    };
                },
                results: function(data, page) {
                    return { results: data };
                }
            },
            createSearchChoice: function(term) {
                return { id: term, text: term };
            }
        }).on("removed", function(e) {
            var url = '@Url.Content("~/UnitDetails/UnTagUnit/" + Model.ViewUnitContract.Id)';
            var id = e.val;
            var tagName = e.choice.text;
            console.log(id + " : " + tagName);

            $.ajax({
                url: url,
                data: { selectedItem: tagName },
                type: 'GET',
                dataType: 'json',
                success: function() {
                },
                error: function() {
                }
            });
        })
            .on("select2-selecting", function(e) {
                var url = '@Url.Content("~/UnitDetails/TagUnit/" + Model.ViewUnitContract.Id)';
                var id = e.val;
                var tagName = e.object.text;
                console.log(id + " : " + tagName);

                $.ajax({
                    url: url,
                    data: { selectedItem: tagName },
                    type: 'GET',
                    dataType: 'json',
                    success: function() {
                    },
                    error: function() {
                    }
                });
            });
    });

C#

public JsonResult GetInitialTags(int id)
{
    Model = new UnitDetailsModel(UnitClient.GetUnit(id));
    foreach (var tag in Model.ViewUnitContract.Tags)
    {
        Model.TagsSelected.Add(tag);
    }

    var result = Model.TagsSelected.Select(a => new
        {
            id = a.Id,
            text = a.Name
        });

    return Json(result, JsonRequestBehavior.AllowGet);
}

现在,我似乎无法弄清楚如何使用initSelection已经选择的标签来填充输入框。我希望有人可以帮助我,因为我开始感到有点失落:)

4

1 回答 1

3

initSelection通过将属性添加到我的 javascript中找到了解决方案:

...
            initSelection: function (element, callback) {
                $.get('@Url.Action("GetInitialTags", "UnitDetails", new { id = Model.ViewUnitContract.Id })', function (initTags) {
                    var tags = [];

                    for (var i = 0; i < initTags.length; i++) {
                        tags.push({ "id": initTags[i].id, "text": initTags[i].text });
                    }

                    callback(tags);
                });
            },
...
于 2013-10-28T12:04:08.147 回答