好的,这是我的挑战: 我想在我的注册视图中创建一个包含三个字符串的下拉列表 - “请选择”,“我是客户”,“我是供应商”。当用户选择“我是客户”并提交时,他将被添加到“客户”角色。当用户选择“我是供应商”角色时,他将被添加到“供应商”角色中。如果用户未选择任何一个并离开“请选择”验证。
我可以通过ViewBag直接填充角色。这是如何做:
Register.cshtml -
<div class="editor-label">
@Html.LabelFor(m => m.Role, "I am a:")
</div>
<div class="editor-field">
@Html.DropDownList("Role", ViewBag.Roles as SelectList,"Please Select")
</div>
AccountModel.cs -
public class RegisterModel
{
[Required]
[Display(Name = "Role")]
public string Role { get; set; }
AccountController.cs -
public ActionResult Register()
{
ViewBag.Roles = new SelectList(Roles.GetAllRoles().ToList());
return View();
我还需要做些什么 -
目前,下拉列表仅填充实际角色。这不是我想要的。
如何在我的注册视图中创建三个字符串的下拉列表 - “请选择”,“我是客户”和“我是供应商”。
我没有留下任何头发,并会感谢任何能帮我解决这个问题的人。感谢。
答案 0 :(得分:6)
类似下面的东西可以完美地运作:
public class RegisterModel
{
[Required]
[Display(Name = "Role")]
public string Role { get; set; }
然后你可以在视图中找到类似的内容。
@Html.DropDownListFor(x => x.Role, new[] {
new SelectListItem() {Text = "I am a vendor", Value = "Vendor"},
new SelectListItem() {Text = "I am a client", Value = "Client"}
}, "Pick a basket")
编辑:字符串是一种引用类型,默认情况下可以为空。
答案 1 :(得分:0)
您可以在构造函数中设置列表值:SelectList(dataObjects, valueField, textField)
ViewBag.Roles = new SelectList(Roles.GetAllRoles().ToList(), "Id", "Name");
这允许您定义Role对象的哪些属性被设置为选项的值和文本。