對不起,如果這是一個重複的問題,我掃描了相關的問題,沒有看到任何明顯的問題。使用實體框架從ASP.NET MVC(C#)中的DropDown獲取SelectedValue
我正在使用一個實體對象的EditModel,以及其中的兩個SelectLists。問題是,一旦我達到我的POST動作,這兩個下拉列表的SelectedValues仍然是我在該模型的構造函數中設置的相同默認值,無論我在瀏覽器上選擇了什麼。
我的構造函數爲SelectedValues設置了一些默認值,但它們只是0和「」(它們在下拉列表中不是有效值)。我有一種感覺,這個問題圍繞着某個方面展開,但我會提供更多細節。
下面是模式的一個精簡版:
public class UserAccountModel
{
public UserAccount UserAccountData { get; set; } // Entity from EF
public SelectList Organizations { get; set; }
public SelectList Roles { get; set; }
public UserAccountModel() : this(null)
{
}
public UserAccountModel(UserAccount obj)
{
UserAccountData = (obj == null) ? new UserAccount() : obj;
// default selected value
int orgChildId = (UserAccountData.Organization == null) ? 0 : UserAccountData.Organization.ID;
string roleChildId = (UserAccountData.Role == null) ? "" : UserAccountData.Role.Name;
// go get the drop down options and set up the property binding
using (UserAccountRepository rep = new UserAccountRepository())
{
Organizations = new SelectList(rep.GetOrganizationOptions(), "ID", "ID", orgChildId);
Roles = new SelectList(rep.GetRoleOptions(), "ID", "Name", roleChildId);
}
}
public void UpdateModel()
{
UserAccountData.Organization = Organizations.SelectedValue as Organization;
UserAccountData.Role = Roles.SelectedValue as Role;
}
}
這是視圖的下拉框部分:
<div class="field">
<label for="ID">Organization:</label>
<%= Html.DropDownList("ID", Model.Organizations) %>
</div>
<div class="field">
<label for="Name">Role:</label>
<%= Html.DropDownList("Name", Model.Roles) %>
</div>
我可能會做一些愚蠢的和明顯的位置。使用ViewData字典時,示例更直接,但我找不到太多試圖使用SelectLists的直接模型綁定的示例。
任何幫助,非常感謝!
克里斯
什麼是控制器代碼的樣子? – Lazarus 2009-12-14 00:51:52
你可以發佈UserAccountData結構的一些代碼,如果你綁定到ViewModel那麼我認爲選擇列表的名稱應該是「UserAccountData.ID」和「UserAccountData.Name」,即時通訊不知道,因爲我不知道的結構UserAccountData – JOBG 2009-12-14 00:57:22
UserAccountData是一個實體,其代碼由實體框架生成。但是,我應該提到的另一條信息是,組織和角色是數據庫中UserAccount表中的外鍵。當我添加UserAccount時,我希望能夠從數據庫中的現有選擇中選擇組織和角色。上面模型中的UpdateModel()方法用於將選定的組織和角色添加到UserAccountData中 – Chris 2009-12-14 02:25:01