1

我正在尝试以 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。

帮助表示赞赏。

4

3 回答 3

1

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

在我的控制器中,我有一个动作并用国家选择填写我的州

公共 JsonResult 状态(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>

我想这会帮助你...

于 2012-09-27T06:42:20.923 回答
0

products在您的 JSON 中与类型不兼容SelectList。尝试手动填写 SelectList。

于 2012-09-27T06:30:41.723 回答
0

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

var products = new SelectList(parsedProductList,"valueField here", "textField here");
于 2012-09-27T06:39:37.367 回答