2013-03-31 214 views
0

我正在使用控制器来创建JSON字符串。从控制器创建JSON

StringBuilder builder = new StringBuilder(); 
... 
builder.Append(String.Format(@"{{""lat"":{0}, ""lon"":{1}}},", latitude, longitude)); 

当谈到来看,上面的代码被渲染成类似

"lat":10.7654200827348, "lon":106.681716282384} 

所以jQuery.parseJSON()不起作用,因为它不理解" 我该如何解决呢?预先感谢您

+1

你是如何在视图中渲染的?你可以发布该代码吗? –

回答

2

绝不要像这样手动创建JSON。你可以有一个控制器动作返回一个JsonResult:

public ActionResult SomeAction() 
{ 
    var model = new 
    { 
     lat = latitude, 
     lon = longitude 
    }; 
    return Json(model, JsonRequestBehavior.AllowGet); 
} 

然后你可以使用AJAX调用消耗这个动作:

<script type="text/javascript"> 
    $.getJSON('@Url.Action("SomeAction")', function(result) { 
     // you could use result.lat and result.lon here directly 
     alert('latitude: ' + result.lat + ', longitude: ' + result.lon); 
    }); 
</script> 

在这种情况下,你不需要进行建筑或任何解析JSON手动。这个管道将由你的框架处理。

+0

嗨达林,我遵循你的想法,但呈现的页面只包含我的json。页面的源代码不包含任何HTML标签,只包含Json。我该如何解决它? 此外,与ViewBag相比,您的创意有哪些优缺点?什么是更好的做法? –

+0

哪个页面只包含JSON?你在哪里调用'$ .getJSON'函数?你是否在一些提交按钮或锚点的点击处理程序中这样做?如果是这样,请确保您已通过从此处理程序返回false来取消默认操作,否则浏览器将简单导航,不会执行AJAX请求。就ViewBag而言,我不知道你会如何以及在哪里使用它?如果您想在不通过AJAX调用的情况下将JSON直接投放到视图中,则还可以通过使用视图模型并将其序列化为JSON来实现。 –

+0

请在这里忍受我。这里是我的代码 '$(document).ready(function(){.getJSON('@ Url.Action(“Index”)',function(result){ alert('latitude:'+ result.Latitude +',longitude:'+ result.Longitude); }); });' 关于'ViewBag',我打算把我的JSON放入它并在我的视图中访问那个JSON。这听起来怎么样? –

0

我不知道这是否能解决您的问题......但无论如何,你应该遵循这个建议!

使用System.Web.Extensions.dll中的JavaScriptSerializer生成您的JSON!

var serializer = new JavaScriptSerializer(); 
builder.Append(serializer.Serialize(new { lat = latitude, lon = longitude }));