.net 5 Razor 页面 - 图像轮播更新视图模型上的图像选择项的值

.net 5 Razor pages - image carousel update value on view model with image selected item

我在剃须刀页面上有一个 bootstrap 轮播。 旋转木马按预期工作,但我想做的是使用在旋转木马中选择的图像值更新文本框的值(用于填充视图模型 属性 的值)。 有没有关于如何最好地实现这一目标的建议或想法。

轮播的 html 代码。

     <div class="form-group">
            @*@Html.LabelFor(model => model.CustomerEditViewModel.SocialUrl4, htmlAttributes: new { @class = "control-label col-md-2" })*@
            <label asp-for="CustomerEditViewModel.HeaderLogoId" class="control-label"></label>
            <div class="col-md-10">
                <input asp-for="CustomerEditViewModel.HeaderLogoId" class="form-control" autofocus="autofocus" />
                <span asp-validation-for="CustomerEditViewModel.HeaderLogoId" class="text-danger"></span>

            </div>
        </div>

<div class="col-lg-8 offset-lg-2" id="slider">
    <div id="myCarousel" class="carousel slide shadow">
        <!-- main slider carousel items -->
        <div class="carousel-inner">

            @{int i = 0;}

            @foreach (var item in Model.HeaderLogoList ) {
                var active = i == 0 ? "active" : "";

                <div class="@active carousel-item" data-slide-number="@i">
                    @*<img src="~/Uploads/@item.File" class="img-fluid">*@
                       <img alt="" class="img-fluid"  src='data:image/*;base64,@(Convert.ToBase64String(item.CompanyPhotoContent))'/>
          
                </div>
                i++;

            }

            <a class="carousel-control-prev" href="#myCarousel" role="button" data-slide="prev">
                <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                <span class="sr-only">Previous</span>
            </a>
            <a class="carousel-control-next" href="#myCarousel" role="button" data-slide="next">
                <span class="carousel-control-next-icon" aria-hidden="true"></span>
                <span class="sr-only">Next</span>
            </a>

        </div>
        <!-- main slider carousel nav controls -->


        <ul class="carousel-indicators list-inline mx-auto border px-2">

            @{int j = 0;}
            @foreach (var item in  Model.HeaderLogoList) {
                var active = i == 0 ? "active" : "";
                var isSelected = i == 0 ? "selected" : "";

                 Model.CustomerEditViewModel.HeaderLogoId = item.ImageId;    

                if ((string)active =="active")
                            {
                       Model.CustomerEditViewModel.HeaderLogoId = item.ImageId;          
                            }
          

                <li class="list-inline-item @active">
                    <a id="carousel-selector-@j" class="@isSelected" data-slide-to="@j" data-target="#myCarousel">
                        @*<img src="~/Uploads/@item.File" style="width: 86px; height: 86px" class="img-fluid">*@
                          <img alt="" style="width: 86px; height: 86px"  class="img-fluid"  src='data:image/*;base64,@(Convert.ToBase64String(item.CompanyPhotoContent))'/>
          
                    </a>
                </li>
                j++;

            }
        </ul>
    </div>
</div>

<style>
    #myCarousel .list-inline {
    white-space:nowrap;
    overflow-x:auto;
}

#myCarousel .carousel-indicators {
    position: static;
    left: initial;
    width: initial;
    margin-left: initial;
}

#myCarousel .carousel-indicators > li {
    width: initial;
    height: initial;
    text-indent: initial;
}

#myCarousel .carousel-indicators > li.active img {
    opacity: 0.7;
}
</style>

我的模型部分有图像

    [BindProperty(SupportsGet = true)]
        public IEnumerable<PhotoGalery> HeaderLogoList { get; set; }

我的相册class

    public class PhotoGalery
    {

        [Key]
        public Guid ImageId { get; set; }
 
       public PhotoTypes PhotoType { get; set; }
        public byte[] CompanyPhotoContent { get; set; }
       
        [MaxLength(450)]
        public string PhotoDescription { get; set; }

        [MaxLength(100)]
        public string PhotoTitle { get; set; }
    }

What it looks like

提前致谢。

尝试将ImageId设置为img的Id,并使用事件处理程序“slide.bs.carousel”,这里是一个演示:

<div class="form-group">
            @*@Html.LabelFor(model => model.CustomerEditViewModel.SocialUrl4, htmlAttributes: new { @class = "control-label col-md-2" })*@
            <label asp-for="@Model.HeaderLogoId" class="control-label"></label>
            <div class="col-md-10">
                <input asp-for="@Model.HeaderLogoId" class="form-control" autofocus="autofocus" />
                <span asp-validation-for="@Model.HeaderLogoId" class="text-danger"></span>

            </div>
        </div>

<div class="col-lg-8 offset-lg-2" id="slider">
    <div id="myCarousel" class="carousel slide shadow">
        <!-- main slider carousel items -->
        <div class="carousel-inner">

            @{int i = 0;}

            @foreach (var item in Model.HeaderLogoList ) {
                var active = i == 0 ? "active" : "";

                <div class="@active carousel-item" data-slide-number="@i">
                    @*<img src="~/Uploads/@item.File" class="img-fluid">*@
                       <img id="@item.ImageId" alt="" class="img-fluid"  src='data:image/*;base64,@(Convert.ToBase64String(item.CompanyPhotoContent))'/>
          
                </div>
                i++;

            }

            <a class="carousel-control-prev" href="#myCarousel" role="button" data-slide="prev">
                <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                <span class="sr-only">Previous</span>
            </a>
            <a class="carousel-control-next" href="#myCarousel" role="button" data-slide="next">
                <span class="carousel-control-next-icon" aria-hidden="true"></span>
                <span class="sr-only">Next</span>
            </a>

        </div>
        <!-- main slider carousel nav controls -->


        <ul class="carousel-indicators list-inline mx-auto border px-2">

            @{int j = 0;}
            @foreach (var item in  Model.HeaderLogoList) {
                var active = i == 0 ? "active" : "";
                var isSelected = i == 0 ? "selected" : "";

                
                <li class="list-inline-item @active">
                    <a id="carousel-selector-@j" class="@isSelected" data-slide-to="@j" data-target="#myCarousel">
                        @*<img src="~/Uploads/@item.File" style="width: 86px; height: 86px" class="img-fluid">*@
                          <img alt="" style="width: 86px; height: 86px"  class="img-fluid"  src='data:image/*;base64,@(Convert.ToBase64String(item.CompanyPhotoContent))'/>
          
                    </a>
                </li>
                j++;

            }
        </ul>
    </div>
</div>

<style>
    #myCarousel .list-inline {
    white-space:nowrap;
    overflow-x:auto;
}

#myCarousel .carousel-indicators {
    position: static;
    left: initial;
    width: initial;
    margin-left: initial;
}

#myCarousel .carousel-indicators > li {
    width: initial;
    height: initial;
    text-indent: initial;
}

#myCarousel .carousel-indicators > li.active img {
    opacity: 0.7;
}
</style>

js:

<script>
        $(function () {
            var carouselEl = $('.carousel');
            var carouselItems = carouselEl.find('.carousel-item');
            $("#HeaderLogoId").val(carouselItems.siblings('.active').find("img").attr("id"));
            carouselEl.carousel({
                interval: 2000
            }).on('slid.bs.carousel', function (event) {
                $("#HeaderLogoId").val(carouselItems.siblings('.active').find("img").attr("id"));
            })
        })
    </script>

结果: