2016-01-18 15 views
-1

我有一個列表框在視圖中。如何在函數jquery中標記複選框

此列表框使用模板

列表框

<div id="UsersLoad" style="width: 50%"> 
    @Html.EditorFor(i => i.Users, "UsersForEdit") 
</div> 

模板UserForEdit(部分代碼)

@model string[] 
@{   
    if (this.Model != null && this.Model.Length > 0) 
    { 
     foreach(var item in this.Model) 
     { 
      listValues.Add(new SelectListItem { Selected = true, Value = item, Text = item }); 
     } 
    } 
    else 
    { 
     listValues = new List<SelectListItem>(); 
    }  
} 

<div class="[email protected] @css"> 
    <h3>@Html.LabelFor(model => model):</h3> 
    @Html.ListBoxFor(model => model, listValues, new { id = id }) 
</div> 

另一種觀點認爲格 「用戶」 之稱。

function LoadUsersCheckBox() { 
    $("#UsersLoad").load('@Url.Action("LoadUsers", "User")' + '?idUser=' + idUser); 
} 

LoadUsers控制器

public JsonResult LoadUsers(int? idUser) 
{ 
    var users = Service.GetSystemUsers(idUser); 
    var model = users.Select(x => new 
       { 
        Value = x, 
        Description = x 
       }); 

    return this.Json(model, JsonRequestBehavior.AllowGet); 
} 

控制器方法返回我想要的東西。

但不是選擇列表框中的項目,而是僅使用找到的用戶的文本覆蓋列表框。

如何在功能LoadUsersCheckBox上標記列表框中的項目?

對不起,我英文不好

回答

0

jQuery的load()方法「從服務器加載數據,並把返回的HTML到匹配的元素。」請注意「返回的HTML」字樣。請參閱http://api.jquery.com/load/

要選擇現有項目,您應該嘗試get()而不是(http://api.jquery.com/jQuery.get/)。在成功回調處理程序中,您需要將返回的數據解析爲數組。然後使用迭代器遍歷列表框中的項目,並且如果它們存在於解析數組中,則將它們標記爲選定項。喜歡的東西:`@ Url.Action( 「LoadUsers」, 「用戶」)」 + 'ID用戶所=' + idUser`:

$.get("action url", function(data) { 
    var users = $.parseJSON(data); 

    $("#UsersLoad option").each(function() { 
     var opt = $(this), 
      value = opt.attr("value"); 

     opt.removeAttr("selected");  

     if (users.indexOf(value) > -1) { 
      opt.attr("selected", "selected"); 
     } 
    }); 
}); 
+0

的'動作url'如下我可以通過作用? –

+0

是的,因爲那只是呈現一個字符串 - url – DvS

+0

我有這個錯誤'SyntaxError:JSON.parse:在JSON數據的第1行第2列的意外字符。 –