Заполните Html.TextBox списком данных, который преобразуется в строку - PullRequest
3 голосов
/ 02 февраля 2010
<p>
    <label for="Tags">Tags:</label>
    <% String tagsText = "";
       foreach (Tag item in Model.Tags)
       {
           tagsText += item.Name + " ";
       }
    %>
    <%= Html.TextBox("Tags", tagsText.Trim()) %>
    <%= Html.ValidationMessage("Tags", "*") %>
</p>

Очевидно, этот код не идеален, и я это признаю. Но как бы вы улучшили это? Мне это кажется немного неаккуратным.

Ответы [ 3 ]

2 голосов
/ 02 февраля 2010

Создайте класс TagList, добавьте функцию:

class TagList
    inherits List<Of Tag>

    function ToJoinedString() as string
        string result = ""
        foreach t as Tag in Me.List
            result = t.Name + " "
        next
        return result.Trim()
    end function

end class

Затем на вашей странице:

<p>
    <label for="Tags">Tags:</label>
    <%= Html.TextBox("Tags", Model.Tags.ToJoinedString()) %>
    <%= Html.ValidationMessage("Tags", "*") %>
</p>

Это дает преимущество в том, что ее можно использовать в других местах.

2 голосов
/ 02 февраля 2010

Не намного чище, но это дает дополнительное преимущество, заключающееся в том, что не нужно добавлять пробел в конце строки.

<p>
    <label for="Tags">Tags:</label>
    <% string tagsText = string.join(" ", (from t in Model.Tags 
                                           select t.Name).ToArray<string>()); %>
    <%= Html.TextBox("Tags", tagsText) %>
    <%= Html.ValidationMessage("Tags", "*") %>
</p>
1 голос
/ 02 февраля 2010

Используя метод расширения, подобный следующему:

public static class StringExtensions
{
    public static string Join(this List<string> values, char separator)
    {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < values.Count; i++)
        {
            string value = values[i];
            stringBuilder.Append(value);

            if (i < (values.Count - 1))
            {
                stringBuilder.Append(separator);
            }
        }

        return stringBuilder.ToString();
    }
}

Вы можете позвонить так:

<%@ Import Namespace="YourExtensionsNamespaceHere" %>
<%= Html.TextBox("Tags", tagsText.Join(' ')) %>

Вы можете получить (очень) небольшое улучшение производительности при использовании StringBuilder по сравнению с некоторыми другими представленными опциями работы со строками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...