2016-06-08 67 views
1

我使用.NET 4.0 MVC &實體框架創建了一個簡單的任務Web應用程序。從數據庫中提取數據。 我有表:用下拉列表替換表單文本字段

Staff {PkId, FirstName, LastName} 
Tasks {PkId, Task, TaskDescription, DueDate} 
TasksAssigned {PkId, StaffId, TaskId} 

當我去編輯TasksAssigned記錄(編輯頁)我會得到一個形式(空間剝離DIV/CSS)

@Html.LabelFor(model => model.PkId) 
@Html.EditorFor(model => model.PkId) 

@Html.LabelFor(model => model.StaffId) 
@Html.EditorFor(model => model.StaffId) 

@Html.LabelFor(model => model.TaskId) 
@Html.EditorFor(model => model.TaskId) 

但我需要顯示Task代替TaskId,而LastName代替StaffId。我需要的是在表單中包含所有名稱和所有可用任務的文本字段中的下拉列表,以便我可以選擇其他人或其他任務(或兩者)。

我假設我應該使用DropDownList()或DropDownListFor()?

感謝您的任何幫助。

(插件) 讓我試着更好地解釋...... 所以,我們說,有工作人員:

{ 12, "John", "Dow" }, 
{ 15, "Bill", "Smith" }. 

比方說有任務

{ 3, "Clean the printer", "Call company to clean the printer... ", "2016-06-25" }

所以,還有的要在TaskAssigned

{ 8, 12, 3 } 

OK了記錄?

讓我們改變記錄,以便將任務分配給Bill而不是John。所以,我會點擊「編輯」按鈕和編輯頁面上我有兩個文本字段([和]代表形式的文本字段)

職員形式:約翰·道 任務:清潔打印機

要更改它,我必須用15替換名稱,比爾的ID,對不對?我想要一個名爲John和Bill的下拉列表,然後選擇Bill的名字,提交時Bill的ID將存儲在TasksAssigned表中。

+0

你的問題太含糊。你能縮小你的問題嗎? – Win

+0

我知道:( 我試了一下問題的底部(插件) – Afan

回答

1

我假設你在調用你的數據時包含了另外兩個表。如果是這樣,你應該能夠很容易地顯示你需要的參照正確的領域。純粹基於你的問題,這應該看起來像下面的東西。

@Html.HiddenFor(model => model.TaskId) 

@Html.LabelFor(model => model.Tasks.Task) 
@Html.EditorFor(model => model.Tasks.Task) 

@Html.LabelFor(model => model.Staff.LastName) 
@Html.EditorFor(model => model.Staff.LastName) 

我沒有看到立即需要顯示或者甚至提供編輯TaskAssigned條目的PK值的選項。這就是我將它移動到隱藏的原因

如果你想給用戶一個下拉列表,你必須確保你在你的模型中發送了潛在的選擇。在這種情況下,您最好希望使用ViewModel發送選項。

這樣你就可以做到像下面這樣的東西。

List<SelectListItem> listOfStaff = new List<SelectListItem>(); 
    listOfStaff.Add(new SelectListItem 
     { 
      Text = "Mark", 
      Value = "1" 
     }); 
    listOfStaff.Add(new SelectListItem 
     { 
      Text = "John", 
      Value = "2", 
      Selected = true 
     }); 

引導你到DropDownListFor你已經在你的問題中引用。

@Html.DropDownListFor(model => model.StaffId, model.listOfStaff, "-- Select Staffmember --") 

希望這可以幫助您更多地瞭解工作解決方案。

+0

嗨Zephire, 是的,所有三個表都包含在內,代碼塊中的代碼是正確的。因爲我做了同樣的事情。:-) 而且,關於下拉列表,我很抱歉如果我問愚蠢的問題 - 我是.NET新手,我無法使用已包含的表格員工顯示列表的記錄? – Afan

+0

嗨@Afan很好聽!您可以使用您的結果模型中已有的唯一名稱生成「DropdownListFor」。然而,**小心**,當你這樣做時,你只會有已經分配給任務的名字。從未分配任務的人員不會出現在TasksAssigned表中,因此包含將不會將其包含在您正在使用的Model中。解決這個問題的建議是根據TasksAssigned模型創建一個ViewModel,但包含一個List listOfStaff,您可以通過從Staff表中獲取所有數據來填充它。 – Zephire

+0

嗨@Afan你在這邊工作嗎?如果是這樣,請將答案標記爲解決方案。謝謝。 – Zephire