[英]How to use client-side validation to work on your asp.net mvc in c#?
[英]ASP.NET MVC - Accessing C# string in client-side JS
在我的控制器方法中,我有以下簡單的逗號分隔的字符串,我使用TempData將其傳遞給視圖:
var test = "hi,bye";
TempData["test"] = test;
在我看來,我有以下js方法:
var desks = @(TempData["test"]).split(",");
當我使用Google Chrome開發者控制台檢查DOM時,看到以下內容:
var desks = hi,bye.split(",");
為什么我傳遞的TempData字符串失去引號並變成某種其他對象? 我究竟做錯了什么?
您傳遞的字符串不會“丟失”其引號; 字符串值沒有引號,即使字符串字面值也沒有引號。
您必須執行JavaScript字符串轉義,如下所示:
'@(TempData["test"].
Replace("\\", "\\\\").
Replace("\n", "\\n").
Replace("\r", "\\r").
Replace("'", "\\'"))'.split(",");
這將創建一個轉義的字符串,該字符串可能足夠安全以作為JavaScript字符串文字輸出。
另一個選擇是調用JSON序列化以輸出字符串,該字符串將覆蓋您的所有基礎。
@Html.Raw((new JavaScriptSerializer()).Serialize(TempData["test"])) .split(",");
JavaScriptSerializer.Serialize
將采用任何對象(在這種情況下為字符串) ,並以JavaScript可以理解的方式輸出它。
然后, Html.Raw
將確保Serialize
的輸出不使用HTML-encoding寫入輸出流。
C#代碼的最后一個)
和JavaScript .split
之間需要有多余的空間。 沒有它,Razor會將split
解釋為C#方法的名稱,但事實並非如此。
要使用JavaScriptSerializer
類,只需在視圖頂部添加@using System.Web.Script.Serialization
指令。
您可以簡單地做到這一點:
'@(TempData["test"])'.split(",");
Javascript不會解釋它是否是C#中的字符串。 它只是將字符串寫入代碼中。 您需要在C#代碼之前和之后手動輸入引號,因此javascript會將hi,bye
作為字符串讀取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.