gpt4 book ai didi

c# - 使用 Entity Framework 从 ASP.NET MVC (C#) 中的 DropDown 取回 SelectedValue

转载 作者:行者123 更新时间:2023-11-30 22:48:07 25 4
gpt4 key购买 nike

抱歉,如果这是一个重复的问题,我扫描了相关的问题,但没有发现任何明显的问题。

我正在使用一个带有 Entity 对象的 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;
}
}

这是 View 的下拉菜单部分:

                <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 字典时,示例更加直接,但我找不到太多尝试对 SelectList 使用直接模型绑定(bind)的示例。

非常感谢任何帮助!

克里斯

最佳答案

Select 元素只回传选中它的实际值。在这种情况下,参数将作为 ID(组织)和名称(角色)在服务器/ Controller 上接收回来。您用于更新操作的模型应该包含这些作为属性,或者您的 Controller 操作应该直接接受它们作为参数。模型上的列表不会被重新填充——而且名称在任何情况下都不匹配。

通过添加修改您的模型:

public int ID { get; set; }
public string Name { get; set; }

Controller Action 为:

public ActionResult Update( UserAccountModel userAccount )
{
...
}

请注意,如果存在验证错误,您将需要重新填充 SelectList 属性(重建菜单)。

关于c# - 使用 Entity Framework 从 ASP.NET MVC (C#) 中的 DropDown 取回 SelectedValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1898407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com