Reputation: 523
I’m trying to get the view from the identity login into a popup that is on another view. How shoul I do that? Here is what I have so far:
<div id="logoContainer">
<button id="loginBtn">LogIn</button>
</div>
<div id="myModal" class="modal">
<div class="modal-content animated fadeIn">
<span class="close" onclick="closeModal()">×</span>
<div id="login" class="added">
<!-- Here is where the login view should appear -->
</div>
</div>
</div>
<script>
var modal = document.getElementById("myModal");
// Get the button that opens the modal
var btn = document.getElementById("loginBtn");
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];
// When the user clicks on the button, open the modal
btn.onclick = function () {
modal.style.display = "block";
}
// When the user clicks on <span> (x), close the modal
span.onclick = function () {
modal.style.display = "none";
}
// When the user clicks anywhere outside of the modal, close it
window.onclick = function (event) {
if(event.target == modal) {
modal.style.display = "none";
}
}
</script>
Note: I’m using ASP.NET core version 3.1, so the access to the identity classes is a bit different.
Upvotes: 2
Views: 184
Reputation: 27825
I’m trying to get the view from the identity login into a popup that is on another view. How shoul I do that?
You can refer to the following example code to achieve your requirement.
Create a partial view named _IdentityLoginPartial
with following content
@model IdentityLoginModel
<div class="row">
<div class="col-md-4">
<section>
<form id="account" method="post" asp-area="Identity" asp-page="/Account/Login">
<h4>Use a local account to log in.</h4>
<hr />
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Input.Email"></label>
<input asp-for="Input.Email" class="form-control" />
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Input.Password"></label>
<input asp-for="Input.Password" class="form-control" />
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
<div class="form-group">
<div class="checkbox">
<label asp-for="Input.RememberMe">
<input asp-for="Input.RememberMe" />
@Html.DisplayNameFor(m => m.Input.RememberMe)
</label>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Log in</button>
</div>
<div class="form-group">
<p>
<a id="forgot-password" asp-area="Identity" asp-page="/Account/ForgotPassword">Forgot your password?</a>
</p>
<p>
<a asp-area="Identity" asp-page="/Account/Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
</p>
</div>
</form>
</section>
</div>
<div class="col-md-6 col-md-offset-2">
<section>
<h4>Use another service to log in.</h4>
<hr />
@{
if ((Model.ExternalLogins?.Count ?? 0) == 0)
{
<div>
<p>
There are no external authentication services configured. See <a href="https://go.microsoft.com/fwlink/?LinkID=532715">this article</a>
for details on setting up this ASP.NET application to support logging in via external services.
</p>
</div>
}
else
{
<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal">
<div>
<p>
@foreach (var provider in Model.ExternalLogins)
{
<button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
}
</p>
</div>
</form>
}
}
</section>
</div>
</div>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}
Custom class IdentityLoginModel
public class IdentityLoginModel
{
public InputModel Input { get; set; }
public IList<AuthenticationScheme> ExternalLogins { get; set; }
public string ReturnUrl { get; set; }
public class InputModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
}
Reference _IdentityLoginPartial
partial view and make it as part of modal popup
<div id="myModal" class="modal">
<div class="modal-content animated fadeIn">
<span class="close" onclick="closeModal()">×</span>
<div id="login" class="added">
<partial name="_IdentityLoginPartial" model='new IdentityLoginModel { ReturnUrl = "/" }' />
</div>
</div>
</div>
Test Result
Upvotes: 1