【发布时间】:2009-12-14 00:47:49
【问题描述】:
对不起,如果这是一个重复的问题,我扫描了相关的问题并没有看到任何明显的问题。
我正在使用带有实体对象的 EditModel,以及其中的两个 SelectList。问题是,一旦我到达我的 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 使用直接模型绑定的示例。
非常感谢任何帮助!
克里斯
【问题讨论】:
-
控制器代码是什么样的?
-
您能否发布一些 UserAccountData 结构的代码,如果您绑定到 ViewModel,那么我认为选择列表的名称应该是“UserAccountData.ID”和“UserAccountData.Name”,我不确定因为我不知道 UserAccountData 的结构
-
UserAccountData 是一个实体,其代码由实体框架生成。但是,我应该提到的另一条信息是组织和角色是数据库中 UserAccount 表中的外键。添加用户帐户时,我希望能够从数据库中的现有选择中选择组织和角色。上面模型上的 UpdateModel() 方法用于将选定的组织和角色添加到 UserAccountData
-
不确定控制器代码添加了什么。我只是在调用 POST 操作时设置了一个断点,并且我期望模型中 SelectLists 的 SelectedValue 值根据下拉列表中的选择进行设置。如果不是这种情况,那么看起来我只需将 SelectedValues(名称和 ID)添加为模型上的显式属性。
标签: c# asp.net-mvc drop-down-menu modelbinders selectedvalue