第23章 多选下拉框的渲染显示

这篇具有很好参考价值的文章主要介绍了第23章 多选下拉框的渲染显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 Core.Domain.Customers.CustomerDefaults

namespace Core.Domain.Customers

{

    /// <summary>

    /// 【用户默认--类】

    /// <remarks>

    /// 摘要:

    ///    该类中的属性成员实例设定一些常量值,为获取1个指定的角色实例提供相应的支撑。

    /// </remarks>

    /// </summary>

    public static class CustomerDefaults

    {

        #region 默认角色名配置设定

        /// <summary>

        /// 【管理员】

        /// <remarks>

        /// 摘要:

        ///     设定管理员角色名。

        /// </remarks>

        /// </summary>

        public static string AdministratorsRoleName => "Administrators";

        /// <summary>

        /// 【论坛主持人】

        /// <remarks>

        /// 摘要:

        ///     设定论坛主持人角色名。

        /// </remarks>

        /// </summary>

        public static string ForumModeratorsRoleName => "ForumModerators";

        /// <summary>

        /// 【注册用户】

        /// <remarks>

        /// 摘要:

        ///     设定注册用户角色名。

        /// </remarks>

        /// </summary>

        public static string RegisteredRoleName => "Registered";

        /// <summary>

        /// 【生产商】

        /// <remarks>

        /// 摘要:

        ///     设定生产商角色名。

        /// </remarks>

        /// </summary>

        public static string VendorsRoleName => "Vendors";

        /// <summary>

        /// 【游客】

        /// <remarks>

        /// 摘要:

        ///     设定游客角色名。

        /// </remarks>

        /// </summary>

        public static string GuestsRoleName => "Guests";

        #endregion

    }

}

2 重构Services.Customers.CustomerServiceDefaults

/// <summary>

        /// 1个指定角色名所对应的1个角色缓存键】

        /// <remarks>

        /// 摘要:

        ///     设定一个缓存键实例,用于拼接1个指定的缓存键字符串,该缓存键字符与角色实体1个指定实例两者构建了缓存映射关系。  

        /// {0} :1个指定的角色名字符串。

        /// </remarks>

        /// </summary>

        public static CacheKey RolesByNameCacheKey => new("role.byname.{0}", RolesByNamePrefix);

        /// <summary>

        /// 1个指定角色名所对应的1个角色前缀】

        /// <remarks>

        /// 摘要:

        ///     设定一个缓存键实例,用于拼接1个指定的缓存键字符串,该缓存键字符与角色实体1个指定实例两者构建了缓存映射关系。  

        /// </remarks>

        /// </summary>

        public static string RolesByNamePrefix => "role.byname.";

3 Services.Customers.CustomerService.GetRoleByNameAsync

/// <param name="name">1个指定的角色名字符串。</param>

        /// <summary>

        /// 【异步通过角色名获取角色】

        /// <remarks>

        /// 摘要:

        ///     直接从角色表中获取1个指定的角色实例;或从分布式缓存数据库获取1个指定角色的所有实例。

        /// </remarks>

        /// <returns>

        ///    1个指定的角色实例。

        /// </returns>

        /// </summary>

        public virtual async Task<Role> GetRoleByNameAsync(string name)

        {

            if (string.IsNullOrWhiteSpace(name))

                return null;

            var key = _staticCacheManager.PrepareKeyForDefaultCache(CustomerServicesDefaults.RolesByNameCacheKey, name);

            var query = from cr in _roleRepository.Table

                        orderby cr.Id

                        where cr.Name == name

                        select cr;

            var role = await _staticCacheManager.GetAsync(key, async () => await query.FirstOrDefaultAsync());

            return role;

        }

4 Web.Areas.Admin.Factories.CustomerModelFactory.PrepareCustomerModelAsync

 /// <param name="model">用户模型纪录的1个指定实例。</param>

        /// <param name="customer">用户实体的1个指定实例。</param>

        /// <param name="excludeProperties">指示是否需要把扩展属性添加到用户添加/编辑视图页面中,默认值:false,即由于该方法中使用的是非操作所以需要添加扩展属性。</param>

        /// <summary>

        /// 【异步预处理用户模型纪录】

        /// <remarks>

        /// 摘要:

        ///     获取用户模型纪录的1个指定实例,为用户添加/编辑视图页面的渲染显示提供支撑。

        /// </remarks>

        /// <returns>

        ///     用户模型纪录的1个指定实例。

        /// </returns>

        /// </summary>

        public virtual async Task<CustomerModel> PrepareCustomerModelAsync(CustomerModel model, Customer customer, bool excludeProperties = false)

        {

            if (customer != null)

            {

            }

            else

            {

                //用户添加/编辑视图页面中所需的扩展属性。

                if (!excludeProperties)

                {

                    //注册用户设定角色下拉框控件的默认角色实例。

                    var registeredRole = await _customerService.GetRoleByNameAsync(CustomerDefaults.RegisteredRoleName);

                    if (registeredRole != null)

                        model.SelectedRoleIds.Add(registeredRole.Id);

                }

            }

            var availableRoles = await _customerService.GetAllRolesAsync();

            model.AvailableRoles = availableRoles.Select(role => new SelectListItem

            {

                Text = role.Name,

                Value = role.Id.ToString(),

                Selected = model.SelectedRoleIds.Contains(role.Id)

            }).ToList();

            return model;

        }

    }

5 Web\Areas\Admin\Views\Customer\Create.cshtml

@model CustomerModel

@{

    ViewData["Title"] = "添加用户";

    Layout = "~/Areas/Admin/Views/Shared/_LayoutPopup.cshtml";

}

@if (ViewBag.RefreshPage == true)

{

    <script type="text/javascript">

        //如果重置按钮定义在查询表单中时,通过下1行语句实现对弹出框的关闭。

        //window.opener.document.forms['@(Context.Request.Query["formId"])'].@(Context.Request.Query["btnId"]).click();

        //如果重置按钮单独定义时,通过下1行语句实现对弹出框的关闭。

        window.opener.document.getElementById("@Context.Request.Query["btnId"]").click();

        window.close();

    </script>

}

<div class="content-header">

</div>

<!-- Main content -->

<div class="content">

    <div class="container-fluid">

        <div class="row">

            <div class="col-md-12">

                <div class="card card-primary card-outline">

                    <form asp-action="Create"

                          asp-route-btnId="@Context.Request.Query["btnId"]">

                        <div class="card-body">

                            <div class="mb-3">

                                <label asp-for="Username" class="control-label"></label>

                                <input asp-for="Username" class="form-control" />

                                <span asp-validation-for="Username" class="text-danger"></span>

                            </div>

                            <div class="mb-3">

                                <label asp-for="Email" class="control-label"></label>

                                <input asp-for="Email" class="form-control" />

                                <span asp-validation-for="Email" class="text-danger"></span>

                            </div>

                            <div class="mb-3">

                                <label asp-for="Password" class="control-label"></label>

                                <input asp-for="Password" class="form-control" />

                                <span asp-validation-for="Password" class="text-danger"></span>

                            </div>

                            <div class="mb-3">

                                <label asp-for="Phone" class="control-label"></label>

                                <input asp-for="Phone" class="form-control" />

                                <span asp-validation-for="Phone" class="text-danger"></span>

                            </div>

                            <div class="mb-3">

                                <label asp-for="Phone" class="control-label"></label>

                                <input asp-for="Phone" class="form-control" />

                                <span asp-validation-for="Phone" class="text-danger"></span>

                            </div>

                            <div class="mb-3">

                                <label asp-for="SelectedRoleIds" class="control-label"></label>

                                <select asp-for="SelectedRoleIds" asp-items="Model.AvailableRoles" asp-multiple="true" class="k-dropdownlist k-picker k-picker-md k-picker-solid k-rounded-md"></select>

                                <span asp-validation-for="SelectedRoleIds" class="text-danger"></span>

                            </div>

                        </div>

                        <div class="card-footer text-center">

                            <input type="submit" value="保存" class="btn btn-primary" />

                        </div>

                    </form>

                </div>

            </div>

        </div>

    </div>

</div>

@section Scripts {

    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}

    <script>

        $(document).ready(function () {

            $("#SelectedRoleIds").kendoMultiSelect({

                select: function (e) {

                    var current = this.value();

                    if (this.dataSource.view()[e.item.index()].value === "0") {

                        this.value("");

                    }

                    else if (current.indexOf("0") !== -1) {

                        current = $.grep(current, function (value) {

                            return value !== "0";

                        });

                        this.value(current);

                    }

                },

                change: function (e) {

                    if (this.value().length === 0)

                        this.value(["0"]);

                }

            }).data("kendoMultiSelect");

        });

    </script>

}

    对以上功能更为具体实现和注释见230604_023ShopRazor(多选下拉框的渲染显示)。文章来源地址https://www.toymoban.com/news/detail-471503.html

到了这里,关于第23章 多选下拉框的渲染显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • layui多选下拉框,多选

    1 先下载xm-select.js,如果layui.js中有就不用了,js中的xmSelect对象在引用xm-select.js后可以直接使用 2 添加多选下拉框标签 3 js上获取下拉数据

    2024年02月11日
    浏览(28)
  • Vue Treeselect树形下拉框的使用

        昨天在做一个表单,里面有一项是以tree形式为选项的select框↓      于是乎,用到了vue中的treeselect组件,在此记录一下。 1、绑值, :value=“form.astdeptId”,主要绑的就是id或者code,通过id或code找到对应的label回显 2、options是数据源,正常调接口获取就行了 3、append-to-bo

    2024年02月06日
    浏览(34)
  • vue页面中一个小列表中多选框的选中状态的两种设置方法

    第一种方法: 所有类型都是固定的、后台提供了选中状态的接口(页面进入时默认展示所有类型和类型的选中状态  思路:         1、列出所有类型同时与后台规定好每种类型的id与对应的名称         2、在mounted中执行获取后台给定的选中状态(包含1个或多个的id数组)

    2024年02月13日
    浏览(31)
  • 微信小程序checkbox,checkbox-group多选框的简易用法,代码简洁,可复用性高

    首先这是官网的用法: 代码非常的长,而且很难复用 (不能多个复选框共用这个checkboxChange方法) 划分线,下面是更好的写法 触发checkboxChange的时候传一个key值过去,之后值对应的是一个新数组(与下面wx:for的数组不同),用来存放已选择的项 因为 微信小程序中我们不能直

    2024年02月11日
    浏览(34)
  • 在html中select标签下拉框的高度怎么调节

    要调整HTML中select标签下拉框的高度,您可以使用CSS中的height属性。具体来说,您可以通过以下方式将其高度设置为特定的像素值: 在上面的代码中,将下拉框的高度设置为100像素。您也可以将其设置为其他值,以适应您的需要。另外,如果您不希望使用内联样式,可以将样

    2024年02月06日
    浏览(32)
  • el-table @selection-change实现多选框的效果以及可以进行批量删除的操作

    2023.2.2今天我学习了如何在表格中添加多选框并且可以进行多选的效果,以及可以进行批量删除的操作。 效果:      html代码如下: js代码如下:

    2024年02月08日
    浏览(25)
  • MVC+Layui 多选下拉框xmSelect

    1、选择layui拓展第三方组件找到xmselect xmSelect下拉多选 xmSelect - Layui 第三方扩展组件平台 (layuion.com) 下载后放到项目文件中 2、项目引用js文件  script src=\\\"~/Content/dist/xm-select.js\\\"/script 3、html添加表单设置id   div class=\\\"layui-form-item\\\"         label class=\\\"layui-form-label\\\"物料类型:/label

    2024年01月24日
    浏览(25)
  • vue3+elementUI-plus实现select下拉框的虚拟滚动

    网上查了几个方案,要不就是不兼容,要不就是不支持vue3, 最终找到一个合适的,并且已上线使用,需要修改一下样式: 代码如下: main.js里引用 vue文件: js代码: css代码:

    2024年02月13日
    浏览(32)
  • 下拉框可筛选可树状多选组件

    实际效果图片 代码部分

    2024年02月15日
    浏览(25)
  • vue element select下拉框树形多选

    components 文件下新建 SelectTree文件 index.vue SelectTree index.vue 使用:

    2024年02月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包