【问题标题】:add item to c# list on selectchange loaded through cascading在通过级联加载的 selectchange 上将项目添加到 c# 列表
【发布时间】:2020-05-22 19:43:55
【问题描述】:

我有多个 attr 的 selectList,通过级联填充(在选择一家公司时,我只显示选定的公司模型)现在我想允许用户选择多个模型,以便在选择时,项目应添加到 c# 列表中并显示在页面,然后允许用户选择更多任何其他公司。附图片 以下是我的代码。 OrderViewModel

      public class OrderViewModel
      {
        [Display(Name ="Order ID")]
        public int order_id { get; set; }
        [Required]

        public string cus_name { get; set; }
        public string cus_phone { get; set; } 
        public System.DateTime Date { get; set; }
        [DataType(DataType.Date)]
        public System.DateTime Date { get; set; }
        public int Amount { get; set; }
        public List<Products> Products { get; set; }

      }

我想在 OrderViewModel 的“产品”列表中绑定选定的项目,该项目将与更多字段一起发送到服务器。 产品

public class Products
{
    public int id { get; set; }
    public int modelId { get; set; }
    public int Phoneid { get; set; }
    public int Quantity { get; set; }
    public double price { get; set; }
    public bool isSelected { get; set; }
    public int order_id { get; set; }
}

剃刀视图

 <div class="form-group row">
                <label  class="control-label col-6">Company Name</label>
                <div class="col-12">
                    <select id="CompanyId"  class="custom-select mr-sm-2"
                            asp-items="@(new SelectList( @ViewBag.Companies,"Phoneid","Com_name"))">
                        <option value="">Please Select</option>
                    </select>
                </div>
                <span  class="text-danger"></span>
            </div>
            <div class="form-group row">
                <label  class="control-label col-6"></label>
                <div class="col-12">
                    <select id="modelId" multiple class="custom-select mr-sm-2"
                            asp-items="@(new SelectList(string.Empty,"modelId","model_name","--Select--"))">
                        <option value="">Please Select</option>
                    </select>
                </div>
                <span class="text-danger"></span>
            </div>

我还没有尝试在列表中添加项目

 <script>
                $("#modelId").change(function () {
                    var list = @(Model.Products);
                    let item = $(this).children("option:selected").val();

                    list.forEach(x => {
                        if (x.modelId != item) {

                            @{ 

                                Products products = new Products()
                                {
                                    isSelected=true,
                                    modelId= item,
                                };
                                Model.Products.Add(products);
                            }
                        }
                    });
                })
                 @for (int i = 0; i < Model.Products.Count; i++)
                 {

                 }
            </script>

我现在通过部分视图显示所有选定的产品,我只想将这些选定的产品连同每个产品的数量和价格发送到服务器

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-core razorengine


    【解决方案1】:

    这是一个如下所示的工作演示:

    型号:

    public class Model
    {
        [Key]
        public int modelId { get; set; }
        [Display(Name = "Model Name")]
        public string model_name { get; set; }
        public int Phoneid { get; set; }
        public IList<Products> Products { get; set; }
    }
    public class Company
    {
        [Key]
        public int Phoneid { get; set; }
        [Display(Name = "Company Name")]
        public string Com_name { get; set; }
    }
    public class Products
    {
        public int id { get; set; }
        public int modelId { get; set; }
        public int Phoneid { get; set; }
        public int Quantity { get; set; }
        public double price { get; set; }
        public bool isSelected { get; set; }
        public int order_id { get; set; }
    }
    

    查看(索引.cshtml):

    @model Products
    <div>
        <div style="float:left;width:40%">
            <form id="form">
                <div class="form-group row">
                    <label>Company Name</label>
                    <div class="col-12">
                        <select id="CompanyId" asp-for="Phoneid" class="custom-select mr-sm-2"
                                asp-items="@(new SelectList( @ViewBag.Companies,"Phoneid","Com_name"))">
                            <option value="">Please Select</option>
                        </select>
                    </div>
                </div>
                <div class="form-group row">
                    <label>Model Name</label>
                    <div class="col-12">
                        <select id="modelId" multiple class="custom-select mr-sm-2" name="modelId"
                                asp-items="@(new SelectList(string.Empty,"modelId","model_name","--Select--"))">
                            <option value="">Please Select</option>
                        </select>
                    </div>                
                </div>
                <div>
                    <input type="button" id="saveBtn" value="Save" />
                </div>
            </form>
    
        </div>
        <div style="float:right;width:60%">
            <h5>Products</h5>
            <div id="products"></div>
        </div>
    </div>
    
    @section Scripts
    {
        <script>
        $(function () {
            $('#CompanyId').change(function () {  
                var data = $("#CompanyId").val();
                console.log(data);
                $.ajax({
                    url: '/Home/GetModel?Phoneid=' + $("#CompanyId").val(),
                    type: 'Get',
                    success: function (data) { 
                        var items = "<option value='0'>Select</option>";
                        $.each(data, function (i, item) {
                            items += "<option value='" + item.value + "'>" + item.text + "</option>";
                        });
                        $('#modelId').html(items);
    
                    }
                })
            });
            $('#saveBtn').click(function () {
                $.ajax({
                    url: '/Home/GetProduct?Phoneid=' + $("#CompanyId").val() + "&modelId=" + $('#modelId').val(),
                    type: 'Post',
                    success: function (data) {
                        $('#products').html(data);
                    }
                })
            })                   
        })
    
        </script>
    }
    

    局部视图(_Partial.cshtml):

    @model IEnumerable<Products>
    <table class="table">
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>check</td>
                    <td>
                        <input asp-for="@item.isSelected" />
                    </td>
                    <td>Product Id</td>
                    <td>
                        @Html.DisplayFor(modelItem => item.id)
                    </td>
                </tr>
                <tr>
                    <td>Quantity</td>
                    <td>
                        @Html.DisplayFor(modelItem => item.Quantity)
                    </td>
                    <td>Price</td>
                    <td>
                        @Html.DisplayFor(modelItem => item.price)
                    </td>
                </tr>
            }
        </tbody>
    </table>
    

    控制器:

    public class HomeController : Controller
    {
        private readonly MvcProj3Context _context;
        public HomeController(MvcProj3Context context)
        {
            _context = context;
        }
    
        public IActionResult Index()
        {
            ViewBag.Companies = _context.Company.ToList();
            return View();
        }
        public JsonResult GetModel(int Phoneid)
        {
            List<Model> model = new List<Model>();
            model = (from m in _context.Model
                     where m.Phoneid == Phoneid
                     select m).ToList();
            return Json(new SelectList(model, "modelId", "model_name"));
        }
        [HttpPost]
        public IActionResult GetProduct(int Phoneid, string[] modelId)
        {
            var data = new List<Products>();
            var ids = modelId[0].Split(',');
            foreach(var item in ids)
            {
                var id = int.Parse(item);
                //guess the modelA in CompanyA contains several products
                var product = (from p in _context.Products
                                where p.Phoneid == Phoneid && p.modelId == id
                                select p).ToList();
                foreach (var pro in product)
                {
                    data.Add(pro);
                }
            }
            return PartialView("_Partial", data);
        }
    }
    

    结果:

    【讨论】:

    • 我想在 OrderViewModel 的“产品”列表中绑定选定的项目,该项目将与更多字段一起发送到服务器。如何在产品列表中添加选定的项目
    • 另一个问题是当你选择 com1 数据时,它是通过局部视图呈现的,但在呈现 com2 数据时。 com1 数据清晰。我想显示以前的 com 选择数据以及新选择的数据
    • 请与关系分享您的整个模型。在产品列表中添加选定项目是什么意思?选定项目是什么?
    • 实际上我正在处理订单页面。我已经分享了我的 orderViewModel。我想允许用户通过 select 选择多个项目,然后将 OrderViewModel 的 ProductList 与客户名称、日期等其他字段绑定。 OrderViewModel 与产品具有一对多关系,因为每个订单可以有多个订单(意味着有产品列表在每个订单中)。 Selected Item 是指通过 select 选择的 Item。我想在 OrderViewModel 的产品列表中添加选定的项目(用户通过选择模型选择)。
    • i want to allow user to select multiple item throught select and then bind it ProductList of OrderViewModel with other fields like customer name,Date etc. -你的意思是当你选择这两个选择列表时,它可以显示与OrderViewModel相关的产品列表。换句话说,你要显示OrderViewModel??@987654328 @-那么,您想将公司名称和型号名称添加到产品列表中吗?您的产品列表中的哪个属性与这些属性匹配。
    猜你喜欢
    • 2021-01-18
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多