2013-11-28 79 views
0

我有兩個輸入字段的名字和姓氏。 應用程序運行得很好。 突然有人從火星和輸入進來的東西像這樣在這些輸入字段Knockout設置允許html的輸入字段的初始值

*(~'@@~>?<+!""*%$)!

兩個姓和名。現在不要問我他爲什麼在火星做這個事情,這很常見。你可以試試這個小提琴

http://jsfiddle.net/farrukhsubhani/3RjRF/

該文本,然後進入我的數據庫,現在當我找回它回來這樣

*(~&#39;@@~&gt;?&lt;+!&quot;&quot;*%$) 這是確定對我來說它的HTML和我可以將它放回到淘汰賽中,並將其填充爲html,如上圖所示。然而,這位火星人認爲,在地球上這不是一個好名字,所以他試圖編輯領域。

上面的小提琴是那種編輯頁面,它顯示了他在底部的舊值和頂部的兩個字段。他不知道html,所以他認爲我們在輸入字段中更改了自己的名字,但是我需要知道

將文本傳遞給敲除以便爲輸入字段賦予初始值時,可以告訴它將此文本視爲HTML所以它在輸入字段中正確呈現

另一種方法是發送他到http://www.w3schools.com/tags/ref_entities.asp並告訴他有關保留的HTML字符。這個信息已經存儲在數據庫中(使用Entity Framework簡單的person.fname和person.lname都具有屬性AllowHTML),所以在我的小提琴中,我剛剛將它放在兩個變量中,您可以看到實際文本框與下面的html不同。如果我沒有使用Knockout綁定,那麼實際文本會顯示在這些框中,用戶可以編輯<>'標誌而不會有任何問題。

任何人在他離開我們的星球之前都有解決方案。這可以改變我們星球上的外星生命。

更新 如果我進入這個領域並粘貼(~'@@~>?<+!""*%$)"綁定工作,很好,你可以複製這個並將其粘貼到小提琴看到。然而,它並沒有從JavaScript變量中挖掘出這個值,希望它是一個字符串,並且在輸入字段中不能正確顯示html特殊字符。

我們已經完成了另一個測試,沒有Knockout,並且當您嘗試編輯它的罰款時,該文本在場內呈現。

我們更新的jsfiddle沒有jQuery和它相同的結果,如果你將其存儲在一個js變量,如果我們將值分配給輸入字段並只給不珍惜輸入場

http://jsfiddle.net/farrukhsubhani/3RjRF/3/

工作使用jQuery來填充全名,然後它工作

http://jsfiddle.net/farrukhsubhani/3RjRF/4/

這最後的小提琴是一個工作例子,我們希望淘汰賽做什麼jQuery是做什麼。

我認爲這個問題接着來到這個文本如何被存儲在JavaScript變量中,並作爲html文本放入輸入字段,以便特殊字符不會出現非轉義狀態。你可以在jsfiddle上嘗試unescape,這對我們不起作用。

回答

0

確定這裏是我做過什麼,在年底

http://jsfiddle.net/farrukhsubhani/3RjRF/7/

我做了以下內容:

  1. 我已增值屬性輸入字段,並放置在輸入文本,因爲它是從哪裏來的服務器進入它。因爲我在MVC中使用TextBoxFor它爲我做了。
  2. 在我應用敲除綁定之前,我使用$('#kfname')選擇了該值,並將其傳遞給實際綁定,以便使用來自服務器的值。以前它通過像(@Model.fname,@Model.lname)

我覺得這個確實被允許的jQuery拿起值,並將其賦值,而不是綁定變量

ko.applyBindings(new ViewModel($("#kfname").val(), $("#klname").val()));

的希望,這將有助於採用基因敲除的人。

+0

如果還有更好的方法,我也希望擁有 –

0

某處沿着您的數據庫進入(或者離開)數據庫,該值正在被HTML轉義。這不是Knockout本身就是這樣做的。你需要跟蹤這個位置,但是你不能僅僅禁用它;您將不得不將其替換爲對結果進行清理的內容,否則您將面臨跨站腳本攻擊(插入到輸入的任何外部源的任何<script>可能會完全訪問您的數據)。

任何時候當你看到使用html:綁定時,警告響鈴應該在你的腦海中消失,你應該非常仔細地檢查以確保沒有原始的,未經檢測的用戶輸入使其成爲顯示字符串的可能性。

+0

我們正在使用實體框架,因此它正在被照顧。我擔心的是我們在Razor View上可以得到的輸出是'*(〜' @@〜>?< +!" " *%$)'我想傳遞給Knockout並試圖在我做之前所以但沒有效果。如果我把淘汰賽,然後TextBoxFor可以正確顯示它。 –

相關問題