knockout textarea值绑定显示换行符的ASCII字符?

问题描述 投票:1回答:1

我有一个淘汰价值binded textarea像这样:

<textarea class="form-control" data-bind="value: test" name="test" rows="4"></textarea>

但是,在使用换行符或额外空格保存数据时,在下次查看页面时,它会使用ASCII字符显示它。像这样:

Overview being explained here in this box.&#xA;&#xA;Test stuff test stuff.

当我查看数据库中的值时,它没有这些字符:

概述在此框中解释。

测试东西测试的东西。

实际上即使在数据传递给视图之前的视图模型中,一切看起来都是正确的:

Overview being explained here in this box.\n\nTest stuff test stuff.

最后,即使第一次进入,淘汰赛属性pageModel().test()也会显示这样的文字:

“概述在此框中解释。

测试东西测试的东西。“

那么为什么淘汰赛终于用ASCII字符呈现呢?当值已经输入时,我的KO模型看起来像这样:

self.test = ko.observable('Overview being explained here in this box.&#xA;&#xA;Test stuff test stuff.');

好的,那是一个MVC问题,因为我这样称呼它:

self.test = ko.observable('@Model.Test');

但我无法弄清楚如何使这个工作,如果我使用Html.Raw正确解释换行但然后打破javascript中断因为行之间有一个空格没有正确的字符串结尾。

我也尝试转义\ r \ n字符:

self.test = ko.observable('Overview being explained here in this box.\\n\\nTest stuff test stuff.');

这并没有消除问题,我仍然得到双&#xA;

在使用值绑定的同时,我怎么能正常工作呢?因为我正在使用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>

但这完全打破了任何textareas的敲除验证,因为html是一种单向绑定,无法验证。所以我仍然需要使用值绑定。

如何使这个工作?

asp.net-mvc asp.net-core knockout.js textarea knockout-validation
1个回答
1
投票

你可能正在寻找

self.test = ko.observable('@HttpUtility.JavaScriptStringEncode(ViewBag.Test)');

或者正如您指出的.NET Core所需要的那样

@(JavaScriptEncoder.Default.Encode(question.Test))
© www.soinside.com 2019 - 2024. All rights reserved.