在MVC C#网站应用程序中使用的textarea中的换行符

Har*_*rry 24 c# asp.net-mvc textarea line-breaks

我在Visual Studio Web Dev中使用ASP.net MVC C#.我有几个textareas填充数据,然后更新到数据库记录.

将记录更新到数据库时是否可以保存换行符?我目前在主页上查看数据,但是如果有人写了几段(包括换行符),格式化将会丢失.

如果这不可能没问题,但只是想问一下是不是.谢谢.

View页面上的代码如下所示:

<div class="editor-field">
        @Html.TextAreaFor(model => model.para1, new { cols = 75, @rows = 5 })
        @Html.ValidationMessageFor(model => model.para1)
</div>
Run Code Online (Sandbox Code Playgroud)

然后我有一个提交表单的按钮.

处理提交的Controller代码如下所示:

[HttpPost]
    public ActionResult Update(Data data)
    {
        if (ModelState.IsValid)
        {
            data.ID = 1; //EF need to know which row to update in the database.
            db.Entry(data).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index", "Home");
        }
        return View(data);
    }
Run Code Online (Sandbox Code Playgroud)

并且数据库的Model代码如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;

namespace DFAccountancy.Models
{
    public class Data
    {
        [DataType(DataType.MultilineText)]
        public int ID { get; set; }
        public string para1 { get; set; }
        public string para2 { get; set; }
    }

    public class DataDBContext : DbContext
    {
        public DbSet<Data> Data { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

===========================================

主页代码

@model IEnumerable<DFAccountancy.Models.Data>

@{
    ViewBag.Title = "Index";
}

<h2>
    DF Accountancy
</h2>
<div>

<fieldset>
<legend>About us</legend>

@foreach (data in Model)
{

<table>
    <tr>
        <td rowspan="2" width="50%">
            <b>
                Suspendisse lectus massa, feugiat at cursus ac, sollicitudin a metus.     Quisque adipiscing commodo sem vitae eleifend. 
            Maecenas ante risus, hendrerit ac tempor et, feugiat eu sapien. Sed sem massa, sodales a varius sit amet, porta in 
            turpis. Duis ullamcorper magna sed risus lobortis luctus. Quisque volutpat enim ut erat tristique sit amet posuere 
            sem ullamcorper. Nulla consequat lectus in sapien sagittis cursus. Quisque elit augue, luctus sed semper non, fringilla 
            sed quam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Fusce vitae 
            augue quis nisi tincidunt ullamcorper. Duis posuere ultricies turpis at dictum. Vivamus at odio eros. Nunc orci 
            lectus, ornare non tincidunt sed, venenatis id lorem. Nulla ullamcorper, leo quis pellentesque sollicitudin, dui 
            libero vehicula lectus, lobortis consequat orci dui in augue. Ut gravida enim convallis sem luctus sit amet eleifend 
            lorem malesuada. Suspendisse in augue diam, eu laoreet diam.
            </b>
            </td>
            <td>
                <div class="display-field">
                    @Html.Raw(data.para1.Replace(Environment.NewLine, "<br/>"))
                </div>
            </td>
        </tr>
        <tr>    
            <td>
                <div class="display-field">
                    @Html.Raw(data.para2.Replace(Environment.NewLine, "<br/>"))
                </div>
            </td>
        </tr>
</table>
}

        </fieldset>
</div>
Run Code Online (Sandbox Code Playgroud)

==========================================

完整的Update View页面代码

@model DFAccountancy.Models.Data

@{
    ViewBag.Title = "Update";
    }



<h2>Update</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript">    </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

<script type="text/javascript">
    $(function () { $("#cl_button1").click(function () { $("#para1").val(""); }); });
    $(function () { $("#cl_button2").click(function () { $("#para2").val(""); }); });
</script>

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>Data</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.para1)
    </div>
    <div class="editor-field">
        @Html.TextAreaFor(model => model.para1, new { cols = 75, @rows = 5 })
        @Html.ValidationMessageFor(model => model.para1)
        <input id="cl_button1" type="button" value="Clear Paragraph" />
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.para2)
    </div>
    <div class="editor-field">
        @Html.TextAreaFor(model => model.para2, new { cols = 75, @rows = 5 })
        @Html.ValidationMessageFor(model => model.para2)
        <input id="cl_button2" type="button" value="Clear Paragraph" />
    </div>



    <p>
        <input type="submit" value="Update" />
        <input type="reset" value="Re-Set to begining" />
    </p>

</fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>
Run Code Online (Sandbox Code Playgroud)

jru*_*ell 39

将字段显示为html时,它不会包含换行符,因为它们在html标记中被视为空格.你可以替换它们<br/>.它看起来像这样:

<div class="display-field">
   @Html.Raw(Model.para1.Replace(Environment.NewLine, "<br/>"))
</div>
Run Code Online (Sandbox Code Playgroud)

或者您可以将其显示为预先格式化的文本,这将保留空白区域:

<div class="display-field">
    <pre>
        @Model.para1
    </pre>
</div>
Run Code Online (Sandbox Code Playgroud)

更新如果您的模型是IEnumerable<T>:

@foreach (var data in Model)
{
    <div class="display-field">
       @Html.Raw(data.para1.Replace(Environment.NewLine, "<br/>"))
    </div>
}
Run Code Online (Sandbox Code Playgroud)

要么

@foreach (var data in Model)
{
    <div class="display-field">
        <pre>
            @data.para1
        </pre>
    </div>
}
Run Code Online (Sandbox Code Playgroud)

  • 我以为他在询问_posting_ textarea中的数据.航线丢失了吗?我不认为他们这样做.也许我误解了这个问题. (2认同)

小智 9

根本不操纵数据.显示它时只需将其包装在<pre> </ pre>中

例: <pre>@Model.Data</pre>

这将保留回车


Sum*_*one 6

Here's what I ended up doing which I think is basically the same as the <pre> tag but without the ugly bootstrap formatting (i.e. border, off white back-ground color, weird font style, etc)

CSS:

.multi-line{
   white-space: pre-wrap;
}
Run Code Online (Sandbox Code Playgroud)

View:

<div class="multi-line">@Html.DisplayFor(model => model.Description)</div>
<div class="multi-line">@data.para</div>
Run Code Online (Sandbox Code Playgroud)

确保您的 div 元素和您的 html helper 之间没有空格,否则这些空格也会显示为上述带有<pre>标签的答案中提到的其他人。