我正在构建一个调用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脚本,但我有以下内容问题: -
这两种方法的优点和缺点是什么(使用javaScript而不是将JSON传递给强类型视图)。
如何将JSON作为模型传递给强类型视图。
我应该遵循哪种方法?
提前感谢您的帮助。
最好的问候
答案 0 :(得分:1)
1。)使用强类型视图的Pro是它适用于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。)这取决于。我认为您没有提供足够的信息来描述哪种情况适合您的情况。