Как отобразить данные textarea в таблице - PullRequest
1 голос
/ 17 февраля 2011

Я использую ASP.MVC 3. У меня есть представление с текстовой областью. Я записываю в него данные, и когда я хочу новый абзац, я дважды нажму клавишу ввода. После ввода всех моих данных я сохраняю текст в базе данных.

В моем представлении сведений я бы отображал данные в виде:

<tr>
   <td valign="top"><label>Body:</label></td>
   <td>@Model.Body</td>
</tr>

Теперь текст отображается в виде 1 абзаца, хотя в моей текстовой области (когда я собирал данные) он выглядел как параграфы.

Как получить данные для отображения в виде абзацев в моей таблице, например, как я записал их в своей текстовой области. Я предполагаю, что мне нужно искать возврат каретки и заменить их тегами разрыва?

1 Ответ

5 голосов
/ 17 февраля 2011

Я предполагаю, что мне нужно искать возврат каретки и заменить их тегами разрыва?

Да, ваше предположение верно. Вы можете использовать пользовательский помощник HTML:

public static IHtmlString FormatBody(this HtmlHelper htmlHelper, string value)
{
    if (string.IsNullOrEmpty(value))
    {
        return MvcHtmlString.Empty;
    }
    var lines = value.Split('\n'); // Might need to adapt
    return htmlHelper.Raw(
        string.Join("<br/>", lines.Select(line => htmlHelper.Encode(line)))
    );
}

и затем:

@Html.FormatBody(Model.Body)

UPDATE:

А вот пример того, как этот метод может быть проверен модулем:

[TestMethod]
public void FormatBody_should_split_lines_with_br_and_html_encode_them()
{
    // arrange
    var viewContext = new ViewContext();
    var helper = new HtmlHelper(viewContext, MockRepository.GenerateStub<IViewDataContainer>());
    var body = "line1\nline2\nline3<>\nline4";

    // act
    var actual = helper.FormatBody(body);

    // assert
    var expected = "line1<br/>line2<br/>line3&lt;&gt;<br/>line4";
    Assert.AreEqual(expected, actual.ToHtmlString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...