0

モデル 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);
};
4

2 に答える 2

0

jquery を使用してドロップダウンの選択された値を取得するには、使用する必要があります。

$('#dropdownid').val();
于 2012-10-12T14:45:21.163 に答える
0

問題は、実際には、明らかに不適切な方法で列挙値の名前を変更しているという事実にあります。サーバーに戻すときに失われる唯一の値は、スペースを含む選択です。(たとえば、「Decommission」への変更は問題ありませんが、「Waiting For Customer」への変更は正しく変換されません)。

于 2012-10-12T17:04:10.890 に答える