2012-03-16 44 views
3

我有一個簡單的視圖模型:編碼視圖模型屬性的JavaScript在剃刀

public class IndexViewModel 
{ 
    public bool ShowWelcomeMsg { get; set; } 
} 

在我看來,我需要在JS這個屬性:

<script type="text/javascript"> 
    var ShowWelcomeMsg = @Model.ShowWelcomeMsg; 
</script> 

但由於其輸出False代替,這不是正確的false但無論如何,這個問題是更通用的,因爲我想知道int,string等的解決方案:

什麼我編碼viewmodel屬性以在JavaScript中使用它的正確方法(在Razor中)?

回答

5

這應該做的工作:

<script type="text/javascript"> 
    var ShowWelcomeMsg = @Html.Raw(Model.ShowWelcomeMsg); 
</script> 

你應該先序列化數據。而是通過一個布爾值,你應該傳遞一個字符串與JSON對象:

public class IndexViewModel 
{ 
    public string ShowWelcomeMsg { get; set; } 
} 

爲了序列化JSON你應該做的:

public ActionResult Index() 
{ 
    var serializer = new JavaScriptSerializer(); 
    var vm = new IndexViewModel 
    { 
     ShowWelcomeMsg = serializer.Serialize(true) 
    }; 
    return View(vm); 
} 

這樣,你甚至可以序列化整體C#對象和將其用作JavaScript中的任何其他對象。

+0

非常感謝你,這是一個好辦法,我想我會建立一個自定義的HTML幫助將其編碼爲JSON。我絕對不希望在控制器或視圖模型中這樣做。我只是想知道爲什麼這不是內置或我無法找到它... – Marc 2012-03-16 18:57:20

+0

當然!你不希望代碼既不在你的控制器也不是viewmodel,一個html助手聽起來像一個乾淨的方法,很高興我的答案幫助你 – 2012-03-16 19:25:02

0

你可以只處理自己的轉換:

<script type="text/javascript"> 
    var ShowWelcomeMsg = @(Model.ShowWelcomeMsg ? "true" : "false"); 
    var WelcomeMsg = "@Model.WelcomeMsg.Replace("\r\n", "<br />")"; 
</script> 
+0

這將適用於我的簡單示例,但是如何使用換行符? – Marc 2012-03-16 18:54:00

+0

已更新的示例。 – mgnoonan 2012-03-16 19:19:09

相關問題