我有一个敲除值绑定文本区域,如下所示:
<textarea class="form-control" data-bind="value: test" name="test" rows="4"></textarea>
但是,当保存带有换行符或多余空格的数据时,在下次查看该页面时,它将显示ASCII字符。像这样:
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()
也会显示如下文本:
“概述在此框中说明。
测试素材测试素材。”
那么为什么敲除最终用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换行符,因为行之间存在空格,且字符串末尾没有正确的结尾。
我还尝试转义\ r \ n字符:
self.test = ko.observable('Overview being explained here in this box.\\n\\nTest stuff test stuff.');
虽然这并不能解决问题,但我仍然得到双

。
在仍然使用值绑定的情况下,如何才能正常工作呢?因为我使用的是ockout.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>
但是,这完全中断了任何textarea的敲除验证,因为html是一种未经验证的绑定方式。所以我仍然需要使用值绑定。
如何使它工作?
答案 0 :(得分:1)
您可能正在寻找
self.test = ko.observable('@HttpUtility.JavaScriptStringEncode(ViewBag.Test)');
或者您为.NET Core指出的
@(JavaScriptEncoder.Default.Encode(question.Test))