传递给View的操作异常无效

时间:2016-01-17 23:38:45

标签: c# asp.net-mvc wcf

我正在尝试,无法显示用户尚未拥有的所有单位的下拉列表。所以我有列表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();
    }

这是我的View模型。但我得到的只是一个空白的下拉?任何人都可以帮助我。

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

1 个答案:

答案 0 :(得分:0)

这将是空白的,因为@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"))