我一直在浏览堆栈以获得答案,我看到了很多不同的方法,但是当我尝试它们时,它们都不起作用。所以也许我在我的代码中做了一些根本错误的事情。
我有一个下拉列表,如下所示:
@Html.DropDownListFor(m => m.PrivilegesGroups.First().Id, new SelectList(Model.PrivilegesGroups, "Id", "Name"), new { id = "PrivilegeGroupIdDDL", @class = "tableInput" })
这是我的模特。
namespace My.Internal.Models {
public class UserViewModel {
public User User { get; set; }
public IEnumerable<PrivilegeGroup> PrivilegesGroups { get; set; }
public IEnumerable<Company> UserCompanies { get; set; }
}
}
其中User是具有Id,Name,UsersCompanyId和PrivilegeGroupId的类。
PrivilegeGroup是一个类:Id,Name。
公司是一个类:Id,Name。
我的保存控制器看起来像这样。
[HttpPost]
public IActionResult ManageUsers(UserViewModel model) {
UserDao db = new UserDao();
User modelToSave = new User();
db.AddUpdateUser(modelToSave);
return RedirectToAction("ManageUsers");
}
我尝试了不同的方法来获取所选下拉列表项的值,但尚未设法将其返回到UserViewModel中。
非常感谢任何有关如何获取所选项目ID的帮助。
答案 0 :(得分:0)
你在这里做了两件大事。首先,你不能在这样的表达式中执行函数:
m => m.PrivilegesGroups.First().Id
在调用表达式之前,您必须执行。要么向ViewModel添加一个变量以包含它的结果,要么将该方法执行到视图中的局部变量中(不是真的推荐,但它会起作用)
另一个问题是你要覆盖id:
new { id = "PrivilegeGroupIdDDL", @class = "tableInput" })
这不好,因为你正在剥夺帮助者防止ID冲突的能力。这可能导致无效的HTML和意外结果。
至于回到UserViewModel,您是否正确使用了Html.BeginForm()?
编辑:
要将ID添加到模型中,只需执行以下操作:
public class UserViewModel {
public User User { get; set; }
public int PrivelegesId { get; set; }
public IEnumerable<PrivilegeGroup> PrivilegesGroups { get; set; }
public IEnumerable<Company> UserCompanies { get; set; }
}
在您的控制器中,执行查询:
model.PrivelegesId = myQuery.PrivelegesGroup.First().Id;
然后在你的DropDownList:
DropDownListFor(m => m.PrivilegesId,
new SelectList(Model.PrivilegesGroups, "Id", "Name"), new { @class = "tableInput" })
我不知道您的Controller代码是什么样的,所以我只是想到变量名,但你应该能够弄明白。