繁体   English   中英

ASP.NET MVC-将JsonConvert.DeserializeObject转换为Html.DropDownList

[英]ASP.NET MVC - JsonConvert.DeserializeObject to Html.DropDownList

我正在尝试以Json的身份读取一些数据,对其进行反序列化,然后将其显示在我的视图中的DropDownList中。 数据如下所示:

{
  "products": [
    {
      "body_html": "<p> ....</p>",
      "created_at": "2012-09-19T11:55:44-04:00",
      ...
      "tags": "Emotive, Flash Memory, MP3, Music",
      "variants": [
        {
          "compare_at_price": null,
          "created_at": "2012-09-19T11:55:44-04:00",
          ...
          "inventory_quantity": 10
        }
      ],
      "images": [
        {
          "created_at": "2012-09-19T11:55:44-04:00",
          "id": 850703190,
          ...
        }
      ]
    }
  ]
}

我已经尝试了一些不同的方法,但是没有用。 现在我在控制器中:

var data = Newtonsoft.Json.Linq.JObject.Parse(productsJson.ToString())["products"];
SelectList productsData = JsonConvert.DeserializeObject<SelectList>(data.ToString());
ViewData["products"] = productsData;

并在视图中:

@Html.DropDownList("ProductList", (SelectList)ViewData["products"])

目前,我收到以下错误:

无法创建和填充列表类型System.Web.Mvc.SelectList。

说明:执行当前Web请求期间发生未处理的异常。 请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。

异常详细信息:System.InvalidOperationException:无法创建和填充列表类型System.Web.Mvc.SelectList。

感谢帮助。

我给你另一个解决方案是用json填充你的下拉列表

在我的控制器中,我采取了一项措施,并在国家/地区中填写了国家/地区选择

public JsonResult State(int countryId){

    var stateList = CityRepository.GetList(countryId);
    return Json(stateList, JsonRequestBehavior.AllowGet);
} 

在我看来,我这样绑定我的状态下拉列表

<script type="text/javascript">
    function cascadingdropdown() {
        $("#stateID").empty();
        $("#stateID").append("<option value='0'>--Select State--</option>");
        var countryID = $('#countryID').val();
        $.ajax({
            url: "/City/State",
            dataType: 'json',
            data: { countryId: countryID },
            success: function (data) {
                $("#stateID").empty();
                $("#stateID").append("<option value='0'>--Select State--</option>");
                $.each(data, function (index, optiondata) {
                    alert(optiondata.StateName);
                    $("#stateID").append("<option value='" + optiondata.ID + "'>" + optiondata.StateName + "</option>");
                });
            },
            error: function () {
                alert('Faild To Retrieve states.');
            }

        });
    } 
</script>

我认为这将帮助您...

JSON中的productsSelectList类型不兼容。 尝试手动填写SelectList。

首先,您应该将json解析为您的产品类型,然后可以这样使用:

var products = new SelectList(parsedProductList,"valueField here", "textField here");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM