2013-03-31 127 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 }));