Атрибуты добавлены дважды в пользовательское управление текстовым полем

Я работаю с динамически созданным пользовательским элементом управления текстовым полем. Я пытаюсь добавить атрибут «имя», используя метод HtmlTextWriter.AddAttribute. Но атрибут дважды добавляется к элементу, когда я проверяю страницу с помощью инструментов разработчика в проводнике IE. Это вызовет ошибку «XML5634: атрибут с таким именем уже существует в этом элементе». в пользовательском агенте Android. Вот мой код

<table id="tblTester" runat=server>
    <tr> 
    <td>
    <asp:Label ID="Label1" runat=server Text="This is the custom textbox"></asp:Label>
    </td>
    <td id="tdTester">
    </td></tr>
</table>

aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    CustomTextBox txtBox = new CustomTextBox();

    txtBox.TextMode = TextBoxMode.Password;
    txtBox.ID = "txtAnswerRe";
    txtBox.Width = Unit.Pixel(220);
    tdTester.Controls.Add(txtBox);
} 

CustomTextbox.cs

public class CustomTextBox : System.Web.UI.WebControls.TextBox
{
    protected override void AddAttributesToRender(HtmlTextWriter writer)
    {
        if (this.TextMode == TextBoxMode.Password)
        {
            Page page = this.Page;
            if (page != null)
            {
                page.VerifyRenderingInServerForm(this);
            }
            string uniqueID = this.UniqueID;
            if (uniqueID != null)
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Name, uniqueID);
            }
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "password");
            string text = this.Text;
            if (text.Length > 0)
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Value, text);
            }
            base.AddAttributesToRender(writer);
        }
        else
        {
            // If Textmode != Password
            base.AddAttributesToRender(writer);
        }
    }
}

Вот результат проверки страницы

<input name="txtAnswerRe" type="password" name="txtAnswerRe" type="password" id="txtAnswerRes" /></td>

В чем причина того, что атрибут с таким же именем добавляется в один элемент в этом случае.


person Suresh    schedule 05.06.2013    source источник


Ответы (1)


Это происходит потому, что вы вызываете base.AddAttributesToRender(writer); в конце инструкции if. Вместо вызова base здесь просто добавьте строку для добавления атрибута id:

writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ID);
person Mike Perrenoud    schedule 05.06.2013
comment
Спасибо, Майкл, теперь это работает. Но есть идеи о том, почему base.AddAttributesToRender(writer) отлично работает для многих браузеров, но не для Android? - person Suresh; 06.06.2013