2012-10-11 54 views
0

我的模型中有一個DropDownList控件,TaskDetailsModel。我宣佈我的DropDownList爲:MVC3 Html.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" }; 
} 

當一切加載和顯示給用戶 - 正確的任務類型選擇完畢。也就是說,使用非默認選擇選項加載時沒有問題。因此,我相信至少部分代碼正常運行。

但是,對選擇所做的任何更改都會丟失。當我嘗試將表單發回服務器時 - 我發現我的選擇選項永遠不會改變。我很想知道我做錯了什麼會導致這種行爲。

更新:

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); 
}; 
+0

是否將Dropdownlist值保存在數據庫中,並在再次顯示頁面時檢索它? –

+0

從數據庫中檢索值。它被寫入TaskDetailsModel構造函數的TaskType屬性中(我將把它編輯到原始文章中)。所選的選項可以由客戶端進行更改。然後,在對話窗口關閉之前,在我回到服務器之前,我查看所選的選項。所選選項與屏幕上顯示的選項不匹配。 –

+0

好吧,直到你回傳纔會發生。此時,下拉列表的值應該位於您在POST控制器方法中收到的模型對象中。 –

回答

0

的問題實際上是與事實,我重新命名我的枚舉值一種顯然不正當的時尚。傳回服務器時唯一會丟失的值是在其中包含空格的選擇。 (例如更改爲「停用」是好的,但更改爲「等待客戶」未能正確翻譯)。

0

要獲得使用jQuery的你應該使用下拉列表中選擇的值,

$('#dropdownid').val(); 
相關問題