Отправьте кнопку Управления входом в систему, когда я совершил нападки, Входят

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

23
задан abatishchev 4 May 2012 в 07:14
поделиться

7 ответов

Это должно быть полезно: http://weblogs.asp.net/jgalloway/archive/2007/10/03/asp-net-setting-the-defaultbutton-for-a-login-control.aspx

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

DefaultButton="Login$LoginButton"

В основном, можно определить DefaultButton не только на уровне Формы, но также и на отдельном уровне Панели, пока фокус в панели, кнопка по умолчанию для панели будет использоваться, если Вы совершите нападки, "Входят"

34
ответ дан Vassili Altynikov 29 November 2019 в 01:23
поделиться

Большой ответ Ведущее устройство Смешения ! По существу просто используйте Панель. DefaultButton, но я хочу разрешить беспорядок о том, на что точно необходимо установить его. Это не просто ".ID" или ".UniqueID" - документации немного недостает на этом.

необходимо установить его на UniqueID кнопки, относительно именованный контейнер Панели UniqueID. Например, если Ваша панель UniqueID является "Body$Content$pnlLogin", и Ваша кнопка входа в систему UniqueID является "Body$Content$ucLogin$btnLogin" (потому что это в управлении, названном "ucLogin"), затем, необходимо установить Панель. DefaultButton к "ucLogin$btnLogin".

можно разработать это в коде следующим образом. (Я не мог найти метод библиотеки классов для этого, но сообщить мне, находите ли Вы тот.)

void SetDefaultButton(Panel panel, IButtonControl button)
{
    string uniqueId = ((Control)button).UniqueID;
    string panelIdPrefix = panel.NamingContainer.UniqueID + Page.IdSeparator;

    if (uniqueId.StartsWith(panelIdPrefix))
    {
        uniqueId = uniqueId.Substring(panelIdPrefix.Length);
    }

    panel.DefaultButton = uniqueId;
}
8
ответ дан MyKuLLSKI 29 November 2019 в 01:23
поделиться

необходимо добавить что-то вроде этого в загрузке страницы...

txtPassword.Attributes.Add("onKeyPress", "javascript:if (event.keyCode == 13) __doPostBack('" + lnkSubmit.UniqueID + "','')")

текстовое поле пароля имеет атрибут onKeyPress, добавил, что это вызовет doPostBack на кнопке отправки, если "Ввести" клавиша будет нажата. Это моделирует нажатие на кнопку отправки.

4
ответ дан StingyJack 29 November 2019 в 01:23
поделиться

Кажется, что кнопка входа в систему выкладывается как <input type="button">, а не <input type="submit">. Вы могли всегда обрабатывать LoginControl по шаблону и добавлять кнопку отправки, избавление от отвратительной разметки по умолчанию одновременно!

, Если необходимо использовать JavaScript для фиксации этого, что-то серьезно неправильно! (но тогда это кажется на знание этого)

2
ответ дан roryf 29 November 2019 в 01:23
поделиться

Основываясь на ваших хороших ответах, создал настраиваемый элемент управления, который
позволяет странице иметь несколько кнопок по умолчанию в зависимости от того, какая панель находится в фокусе.
Он переопределяет метод Panel OnLoad и свойство DefaultButton.

public class DefaultButtonPanel:Panel
{
    protected override void OnLoad(EventArgs e)
    {
        if(!string.IsNullOrEmpty(DefaultButton))
        {
            LinkButton btn = FindControl(DefaultButton) as LinkButton;
            if(btn != null)
            {
                Button defaultButton = new Button {ID = DefaultButton.Replace(Page.IdSeparator.ToString(), "_") + "_Default", Text = " "};
                defaultButton.Style.Add("display", "none");
                PostBackOptions p = new PostBackOptions(btn, "", null, false, true, true, true, true, btn.ValidationGroup);
                defaultButton.OnClientClick = Page.ClientScript.GetPostBackEventReference(p) + "; return false;";
                Controls.Add(defaultButton);
                DefaultButton = defaultButton.ID;
            }
        }
        base.OnLoad(e);
    }

    /// <summary>
    /// Set the default button in a Panel.
    /// The UniqueID of the button, must be relative to the Panel's naming container UniqueID. 
    /// 
    /// For example:
    /// Panel UniqueID is "Body$Content$pnlLogin" 
    /// Button's UniqueID is "Body$Content$ucLogin$btnLogin" 
    /// (because it's inside a control called "ucLogin") 
    /// Set Panel.DefaultButton to "ucLogin$btnLogin".
    /// </summary>
    /// <param name="panel"></param>
    /// <param name="button"></param>
    public override string DefaultButton
    {
        get
        {
            return base.DefaultButton;
        }

        set
        {
            string uniqueId = value;
            string panelIdPrefix = this.NamingContainer.UniqueID + Page.IdSeparator;
            if (uniqueId.StartsWith(panelIdPrefix))
            {
                uniqueId = uniqueId.Substring(panelIdPrefix.Length);
            }
            base.DefaultButton = uniqueId;
        }
    }      
}
1
ответ дан 29 November 2019 в 01:23
поделиться

Эй, я нашел это решение в сети, у меня оно сработало.

 <asp:Panel ID="panelLogin" runat="server" DefaultButton="Login1$LoginButton">
 <asp:Login ID="Login1" runat="server" >
 <LayoutTemplate>
 ...
 <asp:Button  ID="LoginButton" .../>
 </LayoutTemplate>
 </asp:Login>
 </asp:Panel>
2
ответ дан 29 November 2019 в 01:23
поделиться

Предполагая, что Login1 - это ID вашего элемента управления входом.

Чтобы 'enter' отправлялся в любом месте страницы, добавьте init в codebehind:

protected void Page_Init(object sender, EventArgs e)
{
    this.Form.DefaultButton = Login1.FindControl("LoginButton").UniqueID;
}

Чтобы 'enter' отправлялся только внутри элемента управления входом, оберните элемент управления в asp:Panel и установите DefaultButton="Login1$LoginButton" на панели

Оба подхода отлично работают с мастер-страницами.

2
ответ дан 29 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: