Teresa Alves
Teresa Alves

Reputation: 523

How to get content from a view throught another view with asp.net core?

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()">&times;</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

Answers (1)

Fei Han
Fei Han

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()">&times;</span>
        <div id="login" class="added">
            <partial name="_IdentityLoginPartial" model='new IdentityLoginModel { ReturnUrl = "/" }' />
        </div>
    </div>
</div>

Test Result

enter image description here

Upvotes: 1

Related Questions