代码之家  ›  专栏  ›  技术社区  ›  Lars Holdgaard

在ASP.NET MVC中用Razor将呈现的文本发布到服务器

  •  1
  • Lars Holdgaard  · 技术社区  · 6 年前

    我有一种情况,我用剃刀做了一个。这很标准,所以想象一下:

    <div>
        <strong>Undertegnede myndige skyldner</strong>:<br /><br />
            @Model.ContractText.DebtorName, @Model.ContractText.DebtorFullAddress
            @foreach (var reminder in Model.DemandStructure.ReminderFees_Lines)
            {
                @reminder.Label @: @reminder.Amount.ToCurrency()<br />
            }
    </div>
    

    这成为一段很好的文字。

    我想做的是发布生成的文本,并将其存储在服务器上。

    可能的解决方案

    现在,我当然可以在服务器上生成这个字符串,但是之后我会放松Razor的良好格式。

    我可以使用一些模板语言-但我不熟悉任何简单的东西,解决了我在服务器端使用的问题?

    也许把它包装在某种输入字段中以便发送到服务器是有意义的?

    对于如何将生成的文本字符串发布到服务器,是否有简单而智能的解决方案?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Milney    6 年前

    您的意思是将与页面上的用户操作相关的文本发布到服务器吗? 如果不是,当然要在服务器端执行,即使在这种情况下,如果是,您也可以将它包装在表单元素中(或者可能包装文本的副本,例如隐藏元素),并且它将与任何表单提交一起提交-您可能不应该这样做,原因有很多;

    1. 用户将能够在文本发送到服务器之前对其进行编辑,而且看起来他们不应该这样做,因为这样他们就可以在存储之前更改Amount值
    2. 很难对换行符进行编码(它们是HTML中的br元素,但不能正确地将其发布到字符串中的换行符,因此必须转换它们,或者使用文本区域)
    3. 它会产生不必要的网络流量。

    您可能应该做的只是将它存储在服务器端代码中,使用格式字符串创建相同的结果文本;

    var theText = $"Undertegnede myndige skyldner:{Envionment.NewLine}{Envionment.NewLine}{Model.ContractText.DebtorName}, {Model.ContractText.DebtorFullAddress}
            {String.Join(Environment.NewLine, Model.DemandStructure.ReminderFees_Lines})";