从asp.net mvc中的数据库表填充radiobuttonlist

kez*_*kez 5 c# asp.net-mvc razor asp.net-mvc-4

在此输入图像描述

我想创建一个如上所示的表单,

还必须填充与UserGroups表 一起使用的查看器用户组在此输入图像描述

public partial class UserGroup
{
    public string UserGroup_ID { get; set; }
    public string UserGroupNameEn { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

因此填充此用户组并获取我创建的新模型的填充数据(因此它可以应用于查看(第1张图像))

我跟着堆栈溢出问题1问题2来做这个

这是控制器类

    [HttpGet]
    public ActionResult ProductFields_Create()
    {
        var model = new ProductFields
        {
            LisGroups = GetUserGroupListEn()
        };

        return View(model);

    }

    public MultiSelectList GetUserGroupListEn()
    {
        return new MultiSelectList(db.UserGroup.ToList(), "UserGroup_ID", "UserGroupNameEn");
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult ProductFields_Create(ProductFields product_fields)
    {
      ...........
    }
Run Code Online (Sandbox Code Playgroud)

这是第一张图片的模型类

public class ProductFields
{
    public string ProductFieldID { get; set; }
    public string ProductFieldNameEn { get; set; }
    public string ProductFieldNameAr { get; set; }
    public string ProdcutFieldDiscriptionEn { get; set; }
    public string ProductFieldDiscriptionAr { get; set; }

    public List<UserGroup> LisGroups { get; set; }

    [Required]
    public string SelectedGroupID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

上面视图的视图

@model Project_Name.Models.ProductFields

@using (Html.BeginForm())
{

    <fieldset>
         <div class="form-horizontal">           

            @Html.ValidationSummary(true, "", new { @class = "text-danger" })

            .....

             <div class="form-group">
             <div>
                 @Html.ValidationMessageFor(x => x.SelectedGroupID)
                 foreach (var group in Model.LisGroups)
                 {
                 <div>
                     @Html.RadioButtonFor(x => x.SelectedGroupID, group.UserGroup_ID, new { id = "emp" + group.UserGroup_ID })
                     @Html.Label("emp" + group.UserGroup_ID, employee.Label)
                 </div>
                 }

             </div>

          </div>

           <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Create" class="btn btn-default" />
                </div>
           </div>


        </div>
    </fieldset>
}
Run Code Online (Sandbox Code Playgroud)

但在这里,我遇到了红色波浪线的重大错误

当前上下文中不存在名称"group"

在此输入图像描述

无法将类型'System.Web.Mvc.MultiSelectList'隐式转换为'System.Collections.Generic.List'

在此输入图像描述

小智 4

您不需要 a (这是在和方法MultiSelectList中使用的类)。错误的原因是你的属性只是你试图将 typeof 分配给它。ListBox()ListBoxFor()List<UserGroup> LisGroupsMultiSelectList

将 GET 方法更改为

[HttpGet]
public ActionResult ProductFields_Create()
{
    var model = new ProductFields
    {
        LisGroups = db.UserGroup.ToList();
    };
    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

旁注:该属性可以public IEnumerable<UserGroup> LisGroups { get; set; }然后删除不必要的使用.ToList()

然后在视图中

@foreach (var group in Model.LisGroups)
{
    <div>
        <label>
            @Html.RadioButtonFor(x => x.SelectedGroupID, group.UserGroup_ID, new { id = "" })
            <span>@group.UserGroupNameEn</span>
        </label>
    </div>
}
Run Code Online (Sandbox Code Playgroud)