我有一个登录页面,用户在其中输入用户名和密码,然后将用户重定向到他的帐户页面,但是当我按下“返回”按钮时,它将带我回到登录页面。我如何防止这种情况发生。 代码段:
public Login ()
{
if (App.IsUserLoggedIn == false)
{
InitializeComponent();
}
else
{
Navigation.PushAsync(new NavigationPage(new LoginIndexPage()));
}
}
private async void LoginButton_Clicked(object sender, EventArgs e)
{
var user = new Xcore.Users.csUser
{
RefNo = referansnoEntry.Text,
Username = usernameEntry.Text,
Password = passwordEntry.Text
};
var isValid = IsCorrectLogin(user);
if (isValid)
{
App.IsUserLoggedIn = true;
await Navigation.PushAsync(new NavigationPage(new LoginIndexPage()));
}
else
{
showError.Text = "*Hatalı giriş";
passwordEntry.Text = string.Empty;
usernameEntry.Text = string.Empty;
referansnoEntry.Text = string.Empty;
}
}
private bool IsCorrectLogin(Xcore.Users.csUser user)
{
return user.RefNo == Xcore.Users.RegInfo.RefNo
&& user.Username == Xcore.Users.RegInfo.Username
&& user.Password == Xcore.Users.RegInfo.Password;
}
public LoginIndexPage()
{
if (App.IsUserLoggedIn == true)
{
InitializeComponent();
}
else
{
Navigation.PushAsync(new NavigationPage(new Login()));
}
}
protected override void OnAppearing()
{
base.OnAppearing();
showuserName.Text = Xcore.Users.RegInfo.Username;
}
当我登录时,它会进入LoginIndexPage。
答案 0 :(得分:1)
类似于App Pack所述,导航堆栈中不应包含LoginPage。无需尝试删除它,只需将 next 页面设置为根页面。
将下一页设置为:
,而不是将推入堆栈。 Application.Current.MainPage = <your next page>
此外,我不会在页面的构造函数中导航到页面。这不是一个好习惯。
答案 1 :(得分:0)
尝试在您的LoginIndexPage中使用此代码。
protected override bool OnBackButtonPressed()
{
return true; // true prevent navigation back and false to allow
}
答案 2 :(得分:0)
通常在这种情况下,我将从导航堆栈中删除登录页面。
我认为,当您离开登录页面时,导航上会有一种方法,例如Navigation.RemovePage(Page page)。这样,您的后堆栈和功能将保留在原位,但由于已从堆栈中删除,因此不会返回登录页面。
但是,您必须记住的是,如果登录名是根页面,则在调用pop()时确实仍然需要一个页面。