Search code examples
javascripthtmlasp.nettwitter-bootstrapumbraco7

Bootstrap carousel Slider active class and next/prev button not working


I'm using cshtml from Umbraco. I want to create slider on homepage. The image appear on page but "active" item not working. (THIS SOLVED)

Another problem is I want to add different caption for each slide. How to add that?

@{   
   var images = Model.Content.GetPropertyValue<IEnumerable<IPublishedContent>>("backgroundSlider").ToList();
}

<div id="myCarousel" class="carousel slide">
	<div class="carousel-inner">
		@for (var i = 0; i < images.Count; i++)
		{
			<div class="@(i < 1 ? " active":"") item" data-slide-number="@i">
				<img src='@images[i].Url'>
			</div>	
		}
	</div>
	<a class="carousel-control left" href="#myCarousel" data-slide="prev">‹</a>
	<a class="carousel-control right" href="#myCarousel" data-slide="next">›</a>
</div>


Solution

  • The main problem seems to be your .carousel-item class, which was specified as .item instead. These have to be the same as they are specified in the documentation for everything to work as expected.

    @{   
       var images = Model.Content.GetPropertyValue<IEnumerable<IPublishedContent>>("backgroundSlider").ToList();
    }
    
    <div id="myCarousel" class="carousel slide" data-ride="carousel">
        <div class="carousel-inner">
            @for (var i = 0; i < images.Count; i++)
            {
                <div class="@(i < 1 ? " active":"") carousel-item" data-slide-number="@i">
                    <img src='@images[i].Url' class="d-block w-100">
                </div>  
            }
        </div>
        <a class="carousel-control left" href="#myCarousel" data-slide="prev">‹</a>
        <a class="carousel-control right" href="#myCarousel" data-slide="next">›</a>
    </div>
    

    For captioning, this is a suitable Bootstrap docs example that would help you:

    @{   
    var images = Model.Content.GetPropertyValue<IEnumerable<IPublishedContent>>("backgroundSlider").ToList();
    }
    
    <div id="myCarousel" class="carousel slide" data-ride="carousel">
        <div class="carousel-inner">
            @for (var i = 0; i < images.Count; i++)
            {
                <div class="@(i < 1 ? " active":"") carousel-item" data-slide-number="@i">
                    <img src='@images[i].Url' class="d-block w-100">
                    <div class="carousel-caption d-none d-md-block">
                    <h5>@images[i].Title</h5>
                    <p>@images[i].Description</p>
                    </div>
                </div>  
            }
        </div>
        <a class="carousel-control left" href="#myCarousel" data-slide="prev">‹</a>
        <a class="carousel-control right" href="#myCarousel" data-slide="next">›</a>
    </div>
    

    In the example above I'm assuming your image title is in your Title property and caption is in Description. Feel free to amend these as needed.