1

I am trying to show a modal popup when user clicks on a button and i want to render the modal from controller. _BookNow.cshtml

@model Booking

 <div class="modal fade" id="myModal" role="dialog">
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title">Hello Lets Book Now</h4>
        </div>
        <div class="modal-body">

          <form asp-action="BookNow" asp-controller="Booking" method="POST">
           .......
          </form>

        </div>
      </div>
   </div>
 </div>

My Controller Action

      [HttpGet]
     public async Task<IActionResult> BookNow(int vId)
    {
        ViewBag.venueId = vId;
        return PartialView("_BookNow");
    }

I want to get the modal appear in details page when use clicks BookNow button Details.cshtml

<a asp-controller="Booking" asp-action="BookNow" asp-route-vId="@Model.Venue.Id">
                    <div class="btn btn-primary btn-book"> <i class="fa fa-shopping-cart"></i> 
                     @(Model.IsBooked? "Booked" : "Book Now")
                    </div>
</a>

1 Answer 1

2

You can use Microsoft.AspNetCore.Mvc.ViewComponent, see https://learn.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-3.1

You can try this:

Views/Booking/Components/BookNow/BookNowViewComponent.cs

    public class BookNowViewComponent : ViewComponent
    {
        public async Task<IViewComponentResult> InvokeAsync(int vId)
        {
            ViewBag.venueId = vId;
            return View();
        }
    }

Views/Booking/Components/BookNow/Default.cshtml

<div class="modal fade" id="myModal" role="dialog">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Hello Lets Book Now</h4>
            </div>
            <div class="modal-body">

                <form asp-action="BookNow" asp-controller="Booking" method="POST">
                    .......
                </form>

            </div>
        </div>
    </div>
</div>

Details.cshtml

<button type="button" data-toggle="modal" data-target="#myModal">Book Now</button>

@await Component.InvokeAsync("BookNow", new { vId = Model.Venue.Id })
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks ma that helped me, but is there any other way to load modal from server in my details view only after the booknow button is clicked?.
Glad it helped. You can do it via ajax get on button click, and call .modal('show')

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.