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 回答