c# - txt - saltos de linea c sharp
saltos de línea en el área de texto utilizada en una aplicación de sitio web MVC C# (9)
Al mostrar el campo como html, no incluirá saltos de línea ya que se tratan como espacios en el marcado html. Podrías reemplazarlos con <br/>
. Se vería algo como esto:
<div class="display-field">
@Html.Raw(Model.para1.Replace(Environment.NewLine, "<br/>"))
</div>
O puede mostrarlo como texto preformateado, que conservará el espacio en blanco:
<div class="display-field">
<pre>
@Model.para1
</pre>
</div>
Actualizar Si su modelo es IEnumerable<T>
:
@foreach (var data in Model)
{
<div class="display-field">
@Html.Raw(data.para1.Replace(Environment.NewLine, "<br/>"))
</div>
}
o
@foreach (var data in Model)
{
<div class="display-field">
<pre>
@data.para1
</pre>
</div>
}
Estoy usando ASP.net MVC C # en Visual Studio Web Dev. Tengo un par de áreas de texto que se rellenan con datos y luego se actualizan en un registro de base de datos.
¿Es posible guardar saltos de línea cuando se actualiza un registro a la base de datos? Actualmente veo los datos en la página de inicio, pero en este momento, si alguien escribe un par de párrafos (incluidos los saltos de línea), se perderá el formato.
Si esto no es posible, no hay problema, pero solo quería preguntar si lo es. Gracias.
El código en la página Ver se ve así:
<div class="editor-field">
@Html.TextAreaFor(model => model.para1, new { cols = 75, @rows = 5 })
@Html.ValidationMessageFor(model => model.para1)
</div>
Entonces tengo un botón que envía el formulario.
El código del controlador que maneja el envío se ve así:
[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);
}
y el código del modelo para la base de datos se ve así:
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; }
}
}
===========================================
el código de la página de inicio
@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>
==========================================
El código completo de la página Vista de actualización
@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>
El salto de línea dentro de un cuadro de texto es CrLf
por lo que el contenido no se rellena en un cuadro de texto la próxima vez que desaparezca. Sin embargo, si observa la fuente HTML, encontrará que existen.
Pero como un salto de línea no es igual a <br/>
será un poco confuso.
Entonces, lo que la gente está haciendo es reemplazar CrLf
a HTML BR de esta manera:
string ContentToDatabase = input.replace(Environment.NewLine, "<br/>")
Si vuelves a abrir el mismo contenido en el área de texto, verás <br/>
lugar de saltos de línea, por lo que tendrás que volver a convertirlo.
string contentToEdit = fromDatabase.replace("<br/>",Environment.NewLine)
Esto es lo que terminé haciendo, que creo que es básicamente lo mismo que la etiqueta <pre>
pero sin el feo formateo de arranque (es decir, borde, color de fondo blanco, estilo de fuente extraño, etc.)
CSS:
.multi-line{
white-space: pre-wrap;
}
Ver:
<div class="multi-line">@Html.DisplayFor(model => model.Description)</div>
<div class="multi-line">@data.para</div>
Asegúrese de que no haya espacios entre su elemento div y su ayudante html o aparecerán también como otra persona mencionada en las respuestas anteriores con la etiqueta <pre>
.
Me he encontrado con una situación similar con esto, necesito poder agregar un artículo completo a una base de datos desde MVC3 y áreas de texto. Hay muchas maneras de hacer esto, pero lo más simple que he encontrado es desactivar el ValidateInput (NO haga esto si está abriendo esto al público ... esto podría causar secuencias de comandos entre sitios y todo tipo de desagradables, asegúrese de validar los usuarios).
[HttpPost]
[AuthRole(Role = "Administrator")] //Created Validataion so inaccessible from outside
[ValidateInput(false)]
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);
}
Si coloca un punto de interrupción en los datos, debería ver el carácter de nueva línea (''/ r / n'') dentro de VStudio. Puedes reemplazar ese personaje en particular con lo que quieras (sugeriría Environment.Newline si esto no se está publicando en HTML).
data.dataString = dataString.Replace(@"/r/n", Environment.Newline);
//Or change Newline to "<br />" if posting to HTML
No manipules los datos en absoluto. Cuando lo muestres, simplemente envuélvelo en <pre> </pre>
Ejemplo: <pre>@Model.Data</pre>
Esto conservará los retornos de carro.
No sé si es importante cuando se guardan los datos. Supongo que solo se usa para elegir la visualización del miembro, pero intente mover su atributo MultiLineText a los campos de cadena:
public class Data
{
public int ID { get; set; }
[DataType(DataType.MultilineText)]
public string para1 { get; set; }
[DataType(DataType.MultilineText)]
public string para2 { get; set; }
}
Pre funciona bien, PERO toma algún formato "impar".
<pre>
@data.para1
</pre>
Este tipo de trabajo, excepto que sangra la primera línea por los 8 espacios delante de la @ (no está justificado a la derecha, ya que puede aparecer de un vistazo)
<pre>
@data.para1
</pre>
Esto funciona bien, pero todavía tiene algunos retornos.
<pre>@data.para1</pre>
Esto parece estar bien .
Tu problema probablemente no está en el área de texto. Al mostrar la entrada de nuevo en la página de inicio, ¿lo está haciendo dentro de las etiquetas pre? Si no, los saltos de línea y el formato se ignoran.
public class YourClass
{
public int Id { get; set; }
[DataType(DataType.MultilineText)]
public string paragraph { get; set; }
}
@Html.TextAreaFor(m => m.paragraph, new { @class = "form-control", @rows = 5 })