0

我正在构建一个调用 Web 服务提供程序的 asp.net mvc 4 Web 应用程序,然后我正在显示使用 java 脚本从 Web 服务调用返回的 json 结果。例如在控制器级别我有以下操作方法:-

public ActionResult ListPackages()
        {            using (var client = new WebClient())
            {                try
                {
                    var query = HttpUtility.ParseQueryString(string.Empty);
                    var url = new UriBuilder("http://localhost:8080/jw/web/json/workflow/package/list");
                    url.Query = query.ToString();
                    string json = client.DownloadString(url.ToString());
                    Thread.Sleep(500);
                    return Content(json, "application/json");
                }
                catch (System.Net.WebException) {

                   return Content("error", "application/json");

                }           }        }

然后我使用 java 脚本在视图上显示 JSON:-

function getpackagelist(result) {
        $('#products').empty();
        $('#title').text("All Processes");
        $.each(result.data, function (key, val) {
            var str = val.packageName;
            $('<li/>', { text: str })
                .appendTo($('#products'));
        });
        $('#tobehide').hide();

最后在视图中,我有以下代码调用上述操作方法和 java 脚本:-

@{
    ViewBag.Title = "Home Page";
}
@Ajax.ActionLink("Get Process List", "ListPackages", "Home",
new AjaxOptions
    {    HttpMethod = "GET",
        LoadingElementId = "tobehide",
        OnBegin = "clear",

        OnFailure = "clear",
        OnSuccess = "getpackagelist"
    })
<div id= "geturl" data-url="@Url.Action("ListPackages", "Home")">
    <img class="hide" id="tobehide" src="~/Content/ajax-loading2.gif" />
<h1 id ="title"></h1>

<ul id="products">

</ul>
</div>

以上运行良好,但我发现很难使用 javascript 来做整个工作人员,所以我正在考虑将 JSON 作为模型传递给强类型视图而不是使用 java 脚本,但我有以下问题:-

  1. 这两种方法的优缺点是什么(使用 javaScript 与将 JSON 传递给强类型视图)。

  2. 如何将 JSON 作为模型传递给我的强类型视图。

  3. 我应该遵循哪种方法?

提前感谢您的帮助。

此致

4

1 回答 1

1

1.) 使用强类型视图的优点是它适用于 SEO。蜘蛛无法执行 javascript,当您在页面上“查看源代码”时,它们会看到您看到的任何内容。使用 javascript 的优点是页面“似乎”加载得更快——您可能会获得更好的“感知性能”。

2.) 你可以这样做:

// in controller action
...
string json = client.DownloadString(url.ToString());
dynamic asDynamic = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json);
return View(asDynamic);

@* in view *@
@model dynamic
Here is a value: @Model.SomePropertyOnYourJsonObject

3.) 这取决于。我认为您没有提供足够的信息来描述最适合您的情况的决定。

于 2012-10-30T16:45:33.293 回答