モデル TaskDetailsModel 内に DropDownList コントロールがあります。DropDownList を次のように宣言しました。
<%= Html.DropDownListFor(model => model.TaskType, new SelectList(Model.TaskTypeDisplayNames, Model.TaskTypes))%>
私のモデルの対応するクラスには、次のプロパティ宣言が含まれています。
public class TaskDetailsModel
{
[DisplayName("Task Type")]
public TaskType TaskType { get; set; }
public List<TaskType> TaskTypes = new List<TaskType> { TaskType.Decommission, TaskType.Install, TaskType.Modify, TaskType.Move, TaskType.Other, TaskType.Rename };
public List<string> TaskTypeDisplayNames = new List<string> { "Decommission", "Install", "Modify", "Move", "Other", "Rename" };
}
すべてがロードされてユーザーに表示されると、正しい TaskType が選択されています。つまり、デフォルト以外の選択オプションを使用しても問題なくロードできます。そのため、このコードの少なくとも一部は正しく機能していると思います。
ただし、select に対して行った変更はすべて失われます。フォームをサーバーにポストしようとすると、選択したオプションが変更されないことがわかります。そのような行動を引き起こすために私が間違って何をしているのか疑問に思っていました。
アップデート:
public TaskDetailsModel(Task task)
{
TaskType = task.TaskType;
}
//Client-side code to retrieve form values:
var getDialogData = function () {
var dialogData = {};
$(workflowDialogContent).find('input,p,select').each(function () {
if ($(this).is('input')) {
dialogData[this.id] = $.trim($(this).val());
}
else if ($(this).is('select')) {
//At this point in time the selected option does not match what I see on the screen. The user has modified the selected value. I do not see it reflected here.
console.log("Inside here for:", this);
dialogData[this.id] = $.trim($(this).find('option:selected').val());
}
else {
dialogData[this.id] = $.trim($(this).text());
}
});
return JSON.stringify(dialogData);
};