以下是 <div class="row">
<div class="col-md-6">
<input type="submit" value="Save" class="btn btn-lg btn-primary" OnClick="return confirm('¿Are you sure you want to delete this item?');" />
</div>
@if (!Model.IsNew)
{
<div class="col-md-6">
<a href="@(Url.Action<UnitsController>(c => c.Delete(Model.Entity.Id)))" class="btn btn-primary col-md-offset-9 col-md-3 ">Delete</a>
</div>
}
</div>
:
Navigation
目前我使用此代码在成功登录后显示LoginPage ( Login_Click ) -> MainPage | Block BackButton
MainPage ( Logout_Click ) -> LoginPage | Block going back to the MainPage
。
MainPage
我不要希望用户通过点击 await Navigation.PushModalAsync(new MainPage());
返回登录页面返回。
退出时的相同故事。
成功登录后是否有办法从NavigationStack中删除LoginPage(并在注销时删除MainPage)?
注意:
这是模态的。 我没有使用NavigationPage。
答案 0 :(得分:8)
您正在寻找PopToRootAsync
。因此,您的用户输入所需信息,他们点击登录按钮,您执行登录验证,如果成功,您设置一个新的MainPage
,然后PopToRootAsync
,它会弹出除导航堆栈之外的所有根页。< / p>
更新:由于PopToRootAsync
在各种平台上的运行方式,您需要从NavigationPage
开始,但可以在登录后将其作为根页删除处理。
因此,在您的Application构造函数中,不是仅创建LoginPage
,而是将其放入NavigationPage
但隐藏导航栏,以免影响您的{{1}屏幕布局:
LoginPage
然后在您的public App()
{
var navPage = new NavigationPage(new LoginPage());
NavigationPage.SetHasNavigationBar(navPage.CurrentPage, false);
MainPage = navPage;
}
内,您可以将LoginPage
设置为任何Application.Current.MainPage
课程(不必须是Page
),然后NavigationPage
要访问它并完全从导航层次结构中删除PopToRootAsync
。
LoginPage
注意:仅在public partial class LoginPage : ContentPage
{
public LoginPage()
{
InitializeComponent();
loginDone.Clicked += OnLoginClick;
}
async void OnLoginClick(object sender, EventArgs e)
{
// If Login is complete/successful - set new root page
if (YourLoginMethod()) {
Application.Current.MainPage = new MainApplicationPage();
// Pops all but the root Page off the navigation stack, with optional animation.
await Navigation.PopToRootAsync(true);
}
}
}
和iOS
答案 1 :(得分:1)
不要将新页面推送到您不再需要的NavigationStack上,只需将App.MainPage设置为新页面即可。