在编写和读取xml并在页面上正确显示时,如何检测段落?

时间:2012-07-26 14:13:58

标签: c# asp.net xml repeater paragraphs

我想弄清楚的是什么(不幸的是不成功的)是我在用asp:textBox写的时候能够检测到用户是否创建了新段落将此信息保存在xml中,以便在读取xml并通过转发器在页面上呈现时在页面上正确显示(例如替换为<br />)。

这是我的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>

1 个答案:

答案 0 :(得分: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>