Кодировка элементов управления dropdownlist


Я сейчас делаю кодировку на dropdownlist в наш проект.

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

// raising the databound event to to encoding
protected void ddlCountry_DataBound(object sender, EventArgs e)
{
    if (ddlCountry.Items.Count > 0)
    {

        foreach (ListItem list in ddlCountry.Items)
        {
            list.Text = EncodeDropDownItem(list.Text);
        }
    }
}

//below are the methods to do encoding
//encoding with antixss's htmlencode method
private string EncodeDropDownItem(string DropdownText)
{
    return Replacecharacters(AntiXss.HtmlEncode(DropdownText));        
}

//below method will replace the antixsstags with normal character.
private string Replacecharacters(string value)
{
    string dropdowntext;
    StringBuilder sb = new StringBuilder(value);

    sb.Replace("&", "&");
    sb.Replace("&#60;", "<");
    sb.Replace("&#62;", ">");
    sb.Replace("&#34;", "\"");
    sb.Replace("&#92;", "\\");
    return dropdowntext = sb.ToString();
}


3521
2
задан 9 июня 2011 в 08:06 Источник Поделиться
Комментарии
1 ответ

Несколько замечаний -

Похоже, что пока ваш код должен работать как есть, она может быть усовершенствована следующими способами:

А. похоже, у вас тут три метода, когда только один или два потребуется. Вы можете иметь свои причины для этого, но "среднего человека" метод "EncodeDropDownItem" кажется излишним.

Б. Как вы жестко призывы к ШБ.заменить, по одному за раз и с целевых/значения замены "встроен" может быть более эффективным, если они были предварительно в циклической структурой, с Axss теги и замена значений, полученных из пользовательского словаря. Жестко Axss теги и характер представлений, тогда может быть инкапсулирован в том, что пользовательский класс словарь, и повторно использоваться в других контекстах, если это необходимо.

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

Первый - пользовательский словарь для Axss тегам/значений:

    class AntiAxssDictionary : Dictionary<String, String>
{
public void AntiAxssDictionary()
{
this.Add("&#38;", "&");
this.Add("&#60;", "<");
this.Add("&#62;", ">");
this.Add("&#34;", "\"");
this.Add("&#92;", "\\");
}
}

Затем, незначительная перестановка свой способы (это может быть дело вкуса, или функция, но это, как я сделал бы это, учитывая то, что мало я знаю о вашем коде):

    // raising the databound event to to encoding
protected void ddlCountry_DataBound(object sender, EventArgs e)
{
if (ddlCountry.Items.Count > 0)
{
//Initialize an AntiAxssDictionary object:
AntiAxssDictionary tokenProvider = new AntiAxssDictionary();

foreach (ListItem list in ddlCountry.Items)
{
// Encode the AntiAxss string here:
StringBuilder sb = new StringBuilder(AntiXss.HtmlEncode(list.Text));

// Iterate through the Axss tags stored as keys in the dictionary:
foreach (String token in tokenProvider.Keys)
{
// Attempt a replacement for each of the possible
// values in the Axss dictionary:
sb.Replace(token, tokenProvider[token]);
}

// Assign the new value to the list.text property:
list.Text = sb.ToString;
}
}
}

Надеюсь, я ничего не мясник слишком плохо здесь. Я в процессе перехода от vb.net в C# и Java обучения одновременно. Надеюсь, что это поможет, и мне будет интересно услышать комментарии и критику от других участников форума.

1
ответ дан 18 июня 2011 в 06:06 Источник Поделиться