MVC枚举列表使用angular JS在下拉列表中绑定

时间:2017-06-30 11:46:49

标签: javascript c# angularjs asp.net-mvc model-view-controller

我有一个MVC枚举列表,我想使用angular方法在下拉列表中绑定。 怎么可能呢?

public enum DefultBookType : byte
{
  Not Direct= 0,
  Individual = 1
}

public ActionResult Application(){
  ViewBag.BT = Enum.GetNames(typeof(DefultBookType)).ToList();
  return View();
}

@{
 var lstBT=  @ViewBag.BT
}
<select ng-model="Btype" ng-options="ctr as ctr.Name for ctr in lstBT track by ctr.Id">
   <option value="">select</option>
</select>

2 个答案:

答案 0 :(得分:2)

您可以按照以下代码段执行此操作。

替换enum文件中的actioncontroller.cs

public enum DefultBookType : byte
{
    NotDirect = 0,
    Individual = 1
}

public ActionResult Application()
{
    ViewData["BT"] = JsonConvert.SerializeObject(Enum.GetValues(typeof(DefultBookType)), Formatting.Indented, new StringEnumConverter());
    return View();
}

您的.cshtml

<select ng-model="selected" ng-options="key as val for (key, val) in @ViewData["BT"]">
   <option value="">select</option>
</select>

下拉显示如屏幕截图所示:

enter image description here

答案 1 :(得分:1)

您可以使用Json.NET将对象集合转换为对象数组,然后需要在m中分配

@{
 var lstBT = JsonConvert.SerializeObject(ViewBag.BT);
}

然后你必须将lstBT分配到控制器的模型中才能使用;您不能直接引用lstBT,因为lstBT是服务器端字符串,要作为JSON对象的客户端JavaScript数组呈现给客户端。

我不确定动态对象在序列化中是如何工作的;如果有问题,可以将ViewBag切换到ViewData。