0

次のモデル オブジェクトを作成しました:-

namespace MvcApplication1.Models

    {
        public class listofpack
        {
           public string packageName { get; set; }
           public string packageId { get; set; }
        }
    }

次のようにコントローラーにその値を設定しています:-

public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
            using (var client = new WebClient())
            {
                var query = HttpUtility.ParseQueryString(string.Empty);
                query["j_username"] = "kermit";
                query["hash"] = "9449B5ABCFA9AFDA36B801351ED3DF66";
                query["loginAs"] = "admin";
                query["loginAs"] = User.Identity.Name;

                var url = new UriBuilder("http://localhost:8080/jw/web/json/workflow/package/list");
                url.Query = query.ToString();
                string json = client.DownloadString(url.ToString());
                var model = new JavaScriptSerializer().Deserialize<listofpack>(json);
                return View(model);
                // return Content(json, "application/json");
            }

        }

その後、ビューで次のようにモデルをループしようとしています:-

@model IEnumerable<MvcApplication1.Models.listofpack>
@{
    ViewBag.Title = "Home Page";
}
@foreach(var item in Model) { 

        @Html.ActionLink(item.packageId.ToString(), "about", "Home", new { id = "crm"},null)

}

しかし、ビューを実行すると、次のエラーが発生します:-

The model item passed into the dictionary is of type 'MvcApplication1.Models.listofpack', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[MvcApplication1.Models.listofpack]'. 

ブラジル

:::アップデート:::: - - - - - - - - - - - - - - - - - - - - - -------------------------------------------------- -------------------------------------------------- -------------------

私はコントローラコードを次のように更新しました:-

public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
            using (var client = new WebClient())
            {
                var query = HttpUtility.ParseQueryString(string.Empty);
                query["j_username"] = "kermit";
                query["hash"] = "9449B5ABCFA9AFDA36B801351ED3DF66";
                query["loginAs"] = "admin";
                query["loginAs"] = User.Identity.Name;

                var url = new UriBuilder("http://localhost:8080/jw/web/json/workflow/package/list");
                url.Query = query.ToString();
                string json = client.DownloadString(url.ToString());
                var model = new JavaScriptSerializer().Deserialize <List<listofpack>>(json);
                return View(model);
                            }
            }

そしてビューで: -

@model List<MvcApplication1.Models.listofpack>
@Model.Count();
@foreach(var item in Model) { 

        @Html.ActionLink(item.packageId.ToString(), "about", "Home", new { id = "crm"},null)

}

.count()しかし問題は、ビューに 5 つの jason オブジェクトが渡されるはずなのに、ビューに何も表示されず、ゼロが返されることです。では、何がうまくいかないのでしょうか?? よろしくお願いします

4

2 に答える 2

0
var model = new JavaScriptSerializer().Deserialize<listofpack>(json);

は単一のlistofpackオブジェクトに逆シリアル化しています。あなたの見解は期待しています

@model IEnumerable<MvcApplication1.Models.listofpack>

多分この線に沿って何かを試してみてください:

var model = new JavaScriptSerializer().Deserialize<IEnumerable<listofpack>>(json);
于 2012-10-11T13:38:58.077 に答える
0

この質問を読んでください: JSON 逆シリアル化中に 'System.String' の型に対して定義されたパラメーターなしのコンストラクターはありません

No parameterless constructor defined for type of 'System.Collections.Generic.IEnumerable`1[[MvcApplication1.Models.listofpack, MvcApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]'.

この例外は、使用されているジェネリック型 "IEnumerable< listofpack >" がインターフェイスであるためコンストラクターを持たないことを意味します。そのため、"Dictionary" または "List" を使用する必要があります。

編集:ここに例があります:私はクラスを作成し、それに従業員という名前を付けました:

  public class Employee
{    
    public string lastName { get; set; }
    public string firstName { get; set; }
}

次に、コントローラーに次のステートメントを書きました。

string jsonEmployees="{'employees': [{ 'firstName':'John' , 'lastName':'Doe' }, { 'firstName':'Anna' , 'lastName':'Smith' }, { 'firstName':'Peter' , 'lastName':'Jones' }]}";
var model = new JavaScriptSerializer().Deserialize<Dictionary<string,List<Employee>>>(jsonEmployees);
return View(model);

"Dictionary< string,List< listOfpack >>" を使ってみてください。

于 2012-10-11T14:34:05.707 に答える