从 Asp.Net MVC 中的控制器更新模型 属性

Update Model property from Controller in Asp.Net MVC

我有一个 HTML dropdownList 当前显示来自模型的数据,现在对于某些操作我想更改 dropdownList 内容。我想如果我更新模型,它也会反映到视图中。下面是我的模型代码

ViewModel

public class CaseAssignmentRuleSetViewModel
    {
        public CaseAssignmentRuleSetViewModel()
        {

        }
       public int id { get; set; }
       public string name { get; set; }
       public Dictionary<string, string> AssignmentUsers { get; set; }
    }

因此,在 viewModel 中,它是 dictionary 的来源 dropdownList,如下所示。

查看

<select name="assignmentTeam" class="form-control case-assignment-use-type-value2" placeholder="Select a User">


            @foreach (string key in Model.AssignmentUsers.Keys)
            {
                <option value="@key">@Model.AssignmentUsers[key]</option>
            }
        </select>

最后,在一些操作之后,我使用 JQuery 函数将新列表返回到我的 Controller 方法,如下所示。

控制器

 [HttpPost, Route("CaseAssignmentRuleSet/ListofAssignees", Name = "ListofAssignees")]
        public List<string> SetListofAssignees(string [] listOfAssignedroles)
        {
            CaseAssignmentRuleViewModel caseAssignmentRuleViewModel = new CaseAssignmentRuleViewModel();
            List<string> listOfAssignees = new List<string>();
            if (listOfAssignedroles!= null)
            {
                listOfAssignees = new List<string>(listOfAssignedroles);
            }

            return listOfAssignees;             

        }

如何使用新的项目列表更新我的 dropdownList 视图?

所以当你说你正在使用 jquery 函数重新获取新列表时,我假设你正在做的是对你的控制器进行 ajax 调用。

如果是这样,那么在 ajax 调用的完成函数中,清除当前列表,然后遍历新列表并添加新选项:(伪代码)

$.ajax( '/CaseAssignmentRuleSet/ListofAssignee' )
 .done(function(data) {

   //get the select element, you should really add an ID to the element to select instead of name but whatever
   var $el = $('[name=assignmentTeam]');

   //clear the current select list options
   $el.empty();

   //iterate through your new options and add them to the select list
   $.each(data, function(key,value) {
    $el.append($("<option></option>").attr("value", value).text(value));
 });
}).fail(function() {alert( "error" );}).always(function() {//alert( "complete" );});