Visual Studio Web DevでASP.net MVC C#を使用しています。データが入力され、データベースレコードに更新されるテキストエリアがいくつかあります。
レコードがデータベースに更新されるときに改行を保存することは可能ですか?現在、ホームページでデータを表示していますが、現時点では、誰かがいくつかの段落(改行を含む)を書いた場合、フォーマットは失われます。
これが問題ない場合は問題ありませんが、問題があるかどうかを尋ねたいだけです。ありがとう。
[表示]ページのコードは次のようになります。
<div class="editor-field">
@Html.TextAreaFor(model => model.para1, new { cols = 75, @rows = 5 })
@Html.ValidationMessageFor(model => model.para1)
</div>
次に、フォームを送信するボタンがあります。
送信を処理するコントローラーコードは次のようになります。
[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);
}
データベースのモデルコードは次のようになります。
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; }
}
}
==========================================
@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>
==========================================
@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>
フィールドをhtmlとして表示する場合、改行は含まれません。これは、改行がHTMLマークアップでスペースとして扱われるためです。それらを<br/>
に置き換えることができます。次のようになります。
<div class="display-field">
@Html.Raw(Model.para1.Replace(Environment.NewLine, "<br/>"))
</div>
または、書式設定されたテキストとして表示することもできます。これにより、空白が保持されます。
<div class="display-field">
<pre>
@Model.para1
</pre>
</div>
更新モデルがIEnumerable<T>
の場合:
@foreach (var data in Model)
{
<div class="display-field">
@Html.Raw(data.para1.Replace(Environment.NewLine, "<br/>"))
</div>
}
または
@foreach (var data in Model)
{
<div class="display-field">
<pre>
@data.para1
</pre>
</div>
}
データを操作しないでください。表示するときは、単に<pre> </ pre>でラップします
例:<pre>@Model.Data</pre>
これにより、キャリッジリターンが保持されます
saving dataの場合、それが重要であることはわかりません-メンバーのvisualizationを選択するためだけに使用されると仮定しますが、MultiLineText属性を文字列フィールドに移動してみてください:
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は正常に機能しますが、「奇妙な」フォーマットが必要です。
<pre>
@data.para1
</pre>
@
<pre>
@data.para1
</pre>
これはうまく機能しますが、まだいくつかの迷子のリターンがあります。
<pre>@data.para1</pre>
これはちょうどいいのようです。
テキストボックス内の改行はCrLf
であるため、コンテンツは次回失効するように思われるときにテキストボックスに入力されません。ただし、HTMLソースを調べると、それらが存在することがわかります。
しかし、改行は<br/>
と等しくないため、少し混乱するでしょう。
したがって、人々がしているのは、次のようにCrLf
をHTML BRに置き換えることです。
string ContentToDatabase = input.replace(Environment.NewLine, "<br/>")
Textareaで同じコンテンツを再度開くと、<br/>
改行が挿入されているため、元に戻す必要があります。
string contentToEdit = fromDatabase.replace("<br/>",Environment.NewLine)
私がやったことは、基本的に<pre>
タグ、ただしいbootstrap書式設定(境界線、オフホワイトの背景色、奇妙なフォントスタイルなど)なし)
CSS:
.multi-line{
white-space: pre-wrap;
}
見る:
<div class="multi-line">@Html.DisplayFor(model => model.Description)</div>
<div class="multi-line">@data.para</div>
Div要素とhtmlヘルパーの間にスペースがないことを確認してください。スペースがない場合は、上記の回答で<pre>
鬼ごっこ。
これで同様の状況に陥りました。MVC3とテキスト領域からデータベース全体に記事全体を追加できる必要があります。これについてはさまざまな方法がありますが、私が見つけた最も簡単な方法は、ValidateInputをオフにすることです(これを一般に公開している場合はこれを行わないでください...これにより、クロスサイトスクリプティングやあらゆる種類の厄介な、ユーザーを検証することを確認してください)。
[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);
}
データにブレークポイントを設定すると、VStudio内に改行文字( '\ r\n')が表示されます。これにより、特定の文字を任意の文字に置き換えることができます(HTMLにポストバックしない場合は、Environment.Newlineをお勧めします)。
data.dataString = dataString.Replace(@"\r\n", Environment.Newline);
//Or change Newline to "<br />" if posting to HTML
あなたの問題はおそらくテキストエリアにないでしょう。入力をホームページに表示するときに、preタグ内で入力しますか?そうでない場合、改行と書式設定は無視されます。
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 })