在AJAX调用上选择枚举项

时间:2015-04-16 07:39:20

标签: ajax asp.net-mvc enums

我正在处理动作结果,它返回JSON数据进行查看,然后通过AJAX调用加载到textFields上

动作:

public ActionResult loadInf(string custm)
{
    int smclientbranchid = Convert.ToInt32(Session["smclientbranchid"]);
    var query = (from parent in db.Customer
                 join child in db.CustomerAddress on parent.CustomerId equals child.CustomerId
                 where parent.SMClientBranchId == smclientbranchid && parent.NIC == custm
                 select new SalesVM
                 {
                    Indicator = parent.Indicator,
                    //code removed
                 }).ToList();
    return Json(query);
}

在视图中:

@Html.DropDownListFor(model => model.Indicator, 
    new SelectList(Enum.GetValues(typeof(ColorTypes))),
    "<Select>", 
    new { @class = "form-control", id ="Indicator" })

<script type="text/javascript">
    $(document).ready(function () {
        $("#btnSearchCus").click(function () {
            var custm = $('#custm').val();
            $.ajax({
                cashe: 'false',
                type: "POST",
                data: { "custm": custm },
                url: '@Url.Action("LoadCustomerInfo", "Sales")',
                dataType: 'json',  // add this line
                "success": function (data) {
                    if (data != null) {
                        var vdata = data;
                        $("#Indicator").val(vdata[0].Indicator);
                        //code removed
                    }
                }
            });
        });
    });
</script>

我正在获取正确的数据,并且除了“指标”字段(枚举类型)外,还正确加载。

如何从我得到的数据中选择一个枚举列表项。

例如:

  

0,1,2,3索引顺序

2 个答案:

答案 0 :(得分:1)

如果检索字符串变量nm(0,1,2,3 ...) - 最好将类型更改为int,并尝试将整数变量转换为Enum类型。

public ActionResult loadInf(int nm)
{
    ColorTypes enumValue = (ColorTypes) nm;
.......

您可以查看本文的详细信息:http://www.jarloo.com/convert-an-int-or-string-to-an-enum/

答案 1 :(得分:1)

您需要针对选择列表的所有Value值设置option属性。

使用以下内容为您的下拉框选择值的文本表示:

@Html.DropDownListFor(model => model.Indicator, Enum.GetValues(typeof(ColorTypes)).Cast<ColorTypes>().Select(x => new SelectListItem { Text = x.ToString(), Value = x.ToString() }), new { @class = "form-control", id = "Indicator" })

或使用以下内容进行选择integer值:

@Html.DropDownListFor(model => model.Indicator, Enum.GetValues(typeof(ColorTypes)).Cast<ColorTypes>().Select(x => new SelectListItem { Text = x.ToString(), Value = ((int)x).ToString() }), new { @class = "form-control", id = "Indicator" })

这将允许您的.Val() jQuery代码选择正确的代码。