传递到视图的操作异常无效

本文关键字:操作 异常 无效 视图 | 更新日期: 2023-09-27 18:30:41

我正在尝试显示用户尚未拥有的所有单元的下拉列表无济于事。所以我有列表 A 包含所有单位,列表 B 包含用户拥有的所有单位。 我想要的是列表C,它基本上是列表A,从中删除了列表B。 到目前为止,我已经设法过滤掉了数据,但我似乎无法在我的视图中显示它。 我得到的只是一个空白的下拉列表。 谁能看到我哪里出了问题??

public ActionResult AddUnit(String usrCode)
    {
        var units = unitsClient.GetAllunits();
        var allunitsCode = (from s in units select s.unitCode).ToList();
        var thisUnitCode = (from s in db.Units
                                   where s.UsrCode == usrCode
                                   select s.UnitCode).ToList(); 
        var notGot = allunitsCode.Except(thisUnitCode);
        List<unitsummaryDTO> list = UnitList(units, notGot);
        ViewBag.unitCode = new SelectList(list, "unitCode", "unitTitle");
        var model = new UserUnit { UsrCode = usrCode };
        return View("AddUnit", model);
    }
private List<unitsummaryDTO> UnitList(unitsService.unitsDTO[] units, IEnumerable<string> notGot)
    {
        var allunits = unitsClient.GetAllunits();
        var allunitsCode = (from s in allunits select s.unitCode).ToList();
        IEnumerable<String> list1 = allunitsCode;
        IEnumerable<String> list2 = notGot;
        var listFinal = list1.Union(list2).toList;
        return listFinal.Select(x => new unitsummaryDTO(){unitCode = x}).ToList();
    }

这是我的视图模型。 但我得到的只是一个空白下拉菜单??谁能帮我。

@model Projv1.UserUnit
@Html.HiddenFor(model => model.unitCode)
@Html.DropDownList("UnitCode")

传递到视图的操作异常无效

它将是空白的,因为@Html.DropDownList("UnitCode")没有来源。如果您查看 MSDN for Html.DropDownList,您最有可能尝试使用的是 DropDownList(String, IEnumerable<SelectListItem>)

您将选择列表放入ViewBag unitCode请尝试:

@Html.DropDownList("Unit Code", ViewBag.unitCode);

处理此问题的一种更简单的方法是将UserUnit扩展为 ViewModel(或创建某些内容),以在其上包含SelectList所需的项目,并让 MVC 在绑定中完成繁重的工作。

public class UserUnit 
{
   // ... other properties
   IEnumerable<unitsummaryDTO> UnitCodes { get; set; }
   public string MyUnitCode { get; set; }
}

然后

@Html.DropDownListFor(n => n.MyUnitCode, 
                         new SelectList(Model.UnitCodes, "unitCode", "unitTitle"))