2

私が理解しようとしていたのは (残念ながら失敗しました)、ユーザーが asp:textBox に書き込み中に新しい段落を作成したかどうかを検出し、この情報を xml に保存してページに正しく表示する方法でした (たとえば、<br />xml を読み取り、リピーター経由でページにレンダリングするときに s) に置き換えます。

これは私のtextBoxです:

<div><asp:TextBox ID="EdtMessage" Columns="56" Rows="7" TextMode="MultiLine" runat="server" /></div>

これは私がxmlを書く方法です:

var file = Server.MapPath("~/_xml/messages.xml");

var message = new XElement("contact",
    new XElement("name", s_name.Trim()),
    new XElement("message", s_message.Trim()),
    new XElement("date", System.DateTime.Today.ToShortDateString()),
    new XElement("dateOrder", DateTime.Now.ToString()));
var doc = new XDocument();

if (ckeckFileExistance(file))
{
    doc = XDocument.Load(file);
    doc.Element("messages").Add(message);
}
else
{
    doc = new XDocument(new XElement("messages", message));
}
doc.Save(file);

そして、これは私がxmlを読む方法です:

DataSet messages = new DataSet();
try
{
    XDocument doc = XDocument.Load(MapPath("~/_xml/messages.xml"));
    /*messages.ReadXml(MapPath("~/_xml/messages.xml"));*/
    myMessages.DataSource = doc.Elements("messages").Elements("contact").OrderByDescending(m => DateTime.Parse(m.Element("dateOrder").Value));
    myMessages.DataBind();
}

[編集] これは私のリピーターです:

<asp:Repeater ID="myMessages" runat="server">
    <HeaderTemplate>

    </HeaderTemplate>
    <ItemTemplate>
        <div class="message">
            <div class="messageHeader">
                <span><p><b><%# DataBinder.Eval(((XElement)Container.DataItem).Element("name"), "Value")%></b> wrote:</p></span><div class="date"><p><%# DataBinder.Eval(((XElement)Container.DataItem).Element("date"), "Value")%></p></div>
            </div>
            <div class="splitLine"></div>
            <br />
            <div class="messageText">
                <span><p><%# DataBinder.Eval(((XElement)Container.DataItem).Element("message"), "Value")%></p></span>
            </div>
        </div>
    </ItemTemplate>
    <FooterTemplate>

    </FooterTemplate>
</asp:Repeater>
4

1 に答える 1

1

Environment.NewLineのインスタンスを次のように置き換えることができます<br/>:

myMessages.DataSource = 
      doc.Elements("messages").Elements("contact")
      .OrderByDescending(m => DateTime.Parse(m.Element("dateOrder").Value))
      .Select(message => message.Value.Replace(Environment.NewLine, "<br/>"));

アップデート

リピーター マークアップに基づいて、上記の提案を無視し、代わりに messageText マークアップを変更します。このようなものが動作するはずです:

<div class="messageText">
    <span><p>
       <%# ((XElement)Container.DataItem).Element("message").Value
                .Replace(Environment.NewLine, "<br/>") %>
    </p></span>
</div>
于 2012-07-26T14:39:14.697 に答える