剔除textarea值绑定显示换行符为ASCII字符吗?

时间:2019-04-25 17:07:58

标签: asp.net-mvc asp.net-core knockout.js textarea knockout-validation

我有一个敲除值绑定文本区域,如下所示:

<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;

在仍然使用值绑定的情况下,如何才能正常工作呢?因为我使用的是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是一种未经验证的绑定方式。所以我仍然需要使用值绑定。

如何使它工作?

1 个答案:

答案 0 :(得分:1)

您可能正在寻找

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

或者您为.NET Core指出的

@(JavaScriptEncoder.Default.Encode(question.Test))