敲除文本区域值绑定显示换行符的 ASCII 字符?
knockout textarea value binding shows ASCII characters for line breaks?
我有一个剔除值绑定文本区域,如下所示:
<textarea class="form-control" data-bind="value: test" name="test" rows="4"></textarea>
但是,当保存带有换行符或额外 spaces 的数据时,下次查看该页面时它会以 ASCII 字符显示。像这样:
Overview being explained here in this box.

Test stuff test stuff.
当我查看数据库中的值时,它没有这些字符:
Overview being explained here in this box.
Test stuff test stuff.
事实上,即使在数据传递到视图之前的视图模型中,一切看起来都是正确的:
Overview being explained here in this box.\n\nTest stuff test stuff.
最后,即使是第一次输入,敲除 属性 pageModel().test()
也会显示这样的文本:
"Overview being explained here in this box.
Test stuff test stuff."
那么为什么 knockout 最后用 ASCII 字符渲染呢?当值已经输入时,我的 KO 模型看起来像这样:
self.test = ko.observable('Overview being explained here in this box.

Test stuff test stuff.');
好的,这是一个 MVC 问题,因为我是这样称呼它的:
self.test = ko.observable('@Model.Test');
但我无法弄清楚如何让它工作,如果我使用 Html.Raw
换行符被正确解释但随后会中断 javascript 中断,因为有一个 space 行之间没有正确的字符串结尾。
我也尝试转义 \r\n 个字符:
self.test = ko.observable('Overview being explained here in this box.\n\nTest stuff test stuff.');
虽然这并没有解决问题,但我仍然得到双倍 

。
在仍然使用值绑定的情况下,我到底怎样才能让它正常工作?因为我使用的是 knockout.validation,我可以通过使用 html 绑定来完成这项工作,并使用一些小技巧:
<textarea class="form-control" data-bind="value: test, event: { keyup: function(data, event) { data.test(event.target.value); } }" name="test" rows="2"></textarea>
但这完全破坏了任何文本区域的敲除验证,因为 html 是一种无法验证的单向绑定。所以我仍然需要使用值绑定。
如何让它工作?
您可能正在寻找
self.test = ko.observable('@HttpUtility.JavaScriptStringEncode(ViewBag.Test)');
或者正如您针对 .NET Core 指出的那样,您将需要
@(JavaScriptEncoder.Default.Encode(question.Test))
我有一个剔除值绑定文本区域,如下所示:
<textarea class="form-control" data-bind="value: test" name="test" rows="4"></textarea>
但是,当保存带有换行符或额外 spaces 的数据时,下次查看该页面时它会以 ASCII 字符显示。像这样:
Overview being explained here in this box.

Test stuff test stuff.
当我查看数据库中的值时,它没有这些字符:
Overview being explained here in this box.
Test stuff test stuff.
事实上,即使在数据传递到视图之前的视图模型中,一切看起来都是正确的:
Overview being explained here in this box.\n\nTest stuff test stuff.
最后,即使是第一次输入,敲除 属性 pageModel().test()
也会显示这样的文本:
"Overview being explained here in this box.
Test stuff test stuff."
那么为什么 knockout 最后用 ASCII 字符渲染呢?当值已经输入时,我的 KO 模型看起来像这样:
self.test = ko.observable('Overview being explained here in this box.

Test stuff test stuff.');
好的,这是一个 MVC 问题,因为我是这样称呼它的:
self.test = ko.observable('@Model.Test');
但我无法弄清楚如何让它工作,如果我使用 Html.Raw
换行符被正确解释但随后会中断 javascript 中断,因为有一个 space 行之间没有正确的字符串结尾。
我也尝试转义 \r\n 个字符:
self.test = ko.observable('Overview being explained here in this box.\n\nTest stuff test stuff.');
虽然这并没有解决问题,但我仍然得到双倍 

。
在仍然使用值绑定的情况下,我到底怎样才能让它正常工作?因为我使用的是 knockout.validation,我可以通过使用 html 绑定来完成这项工作,并使用一些小技巧:
<textarea class="form-control" data-bind="value: test, event: { keyup: function(data, event) { data.test(event.target.value); } }" name="test" rows="2"></textarea>
但这完全破坏了任何文本区域的敲除验证,因为 html 是一种无法验证的单向绑定。所以我仍然需要使用值绑定。
如何让它工作?
您可能正在寻找
self.test = ko.observable('@HttpUtility.JavaScriptStringEncode(ViewBag.Test)');
或者正如您针对 .NET Core 指出的那样,您将需要
@(JavaScriptEncoder.Default.Encode(question.Test))