Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将viewbag分配给JQuery函数中的变量

将viewbag分配给JQuery函数中的变量
EN

Stack Overflow用户
提问于 2020-04-15 19:45:59
回答 1查看 58关注 0票数 1

我正在使用MVC,并试图检查该项目是否有足够的库存。我在我的控制器中这样做

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        [HttpPost]
        [ValidateAntiForgeryToken]
        [Audit]
        public void AddUnits(int so_id, int site_id, int[] addItem_id, int[] addItem_qty)
        {
            // Loop however many times is necessary to iterate through the largest array
            for (int i = 0; i < Math.Max(Math.Max(addItem_id.Length, addComp_id.Length), addPart_id.Length); i++)
            {
                foreach (SODetails sod in db.SalesOrders.Find(so_id).SalesDetails)
                {
                    if (i < addItem_id.Length && addItem_qty[i] != 0 && sod.ItemID == addItem_id[i] && addItem_id[i] != 365 && addItem_id[i] != 410) 
                    {

                        sod.item_qty += addItem_qty[i];
                        sod.item_discount = addItem_disc[i];
                        addItem_id[i] = 0;
                        addItem_qty[i] = 0;
                        addItem_disc[i] = 0;
                    }

                }
                db.SaveChanges();

                if(i < addItem_qty.Length && addItem_qty[i] != 0)
                {
                    SODetails sODetails = new SODetails
                    {
                        SalesOrderID = so_id,
                        SiteID = site_id
                    };

                    // Only add a unit to the SODetails object if it's not null and has an id and quanitity specified
                    if(i < addItem_id.Length && addItem_id[i] != 0 && addItem_qty[i] != 0)
                    {
                        sODetails.ItemID = addItem_id[i];
                        sODetails.item_qty = addItem_qty[i];
                        sODetails.item_discount = addItem_disc[i];
                    }


                    SalesOrder SO = db.SalesOrders.Find(sODetails.SalesOrderID);
                    SODetails salesOrderDetails = db.SODetails.Add(sODetails);
                    salesOrderDetails.SalesOrder = SO;

                    Item SO_Item = db.Items.Find(sODetails.ItemID);

                    if (SO_Item != null)
                    {
                        ViewBag.itemOnHand = SO_Item.On_Hand;

                        sODetails.item_qty = sODetails.item_qty == null ? 0 : sODetails.item_qty;
                        int qtyOrdered = sODetails.item_qty == null ? 0 : (int)sODetails.item_qty;
                        salesOrderDetails.dynamicItem_qty = qtyOrdered;

                        if (SO_Item.SalesOrderMessage != null)
                            TempData["SalesOrderMessage"] = SO_Item.SalesOrderMessage;
                    }

                    }
                }
            }

            db.SaveChanges();
        }

目前,我正在尝试通过执行ViewBag.itemOnHand = SO_Item.On_Hand;将该商品的库存计数传递到viewbag中

然后,我的视图Jquery函数如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 // Get all item ids and quantities and store them in arrays
        var itemssel = document.getElementsByClassName("Item-select");
        var itemsqtysel = document.getElementsByClassName("Item-qty");
        var itemsdiscsel = document.getElementsByClassName("Item-disc");
        var itemOnHand = @ViewBag.itemOnHand;
        for (i = 0; i < itemssel.length; i++) {
            items[i] = itemssel[i].options[itemssel[i].selectedIndex].value;
            itemsqty[i] = itemsqtysel[i].value;
            itemsdisc[i] = itemsdiscsel[i].value;
            if (itemsqty[i] < 0) {
                alert("Quantities can't be negative!");
                return;
            }      
            if (itemsqty[i] < itemOnHand) {
                alert("Not enough inventory in site!");
                return;
            }

// The add units method is then called here

 // Send all the values to the AJAX function and respond with success or error 
        $.ajax({
            type: "POST",
            url: "@IGT.baseUrl/SODetailsAjax/AddUnits",
            traditional: true,
            data: {
                __RequestVerificationToken: token, 
                so_id: @Int32.Parse(Request["orderId"]),
                site_id: site,
                addItem_id: items,
                addItem_qty: itemsqty,
                addItem_disc: itemsdisc,
                addComp_id: comps,
                addComp_qty: compsqty,
                addComp_disc: compsdisc,
                addPart_id: parts,
                addPart_qty: partsqty,
                addPart_disc: partsdisc
            },
            success: function () {
                location.href = "../SalesOrders/Details?id=@so.ID";
            },
            error: function (jqXHR, status, error) {
                alert("Error: " + error);
            }
        });

但它不能像现在这样正常工作。为什么会这样呢?

按照要求,下面是我在页面发布前的GET方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        // GET: SODetails/Create
        [RestrictAccess(restriction = AccessRestrictions.ModifySalesOrder)]
        public ActionResult Create(int orderId)
        {
            var SOID = (from i in db.SalesOrders.Where(x => x.ID == orderId).Where(x => x.deleted == false)
                        select new
                        {
                            SO_id = i.ID,
                            status = i.ID + " (Status: " + i.SalesOrderStatus +")",
                        }).OrderByDescending(x => x.SO_id).ToList();

            var item = (from i in db.Items.Where(x => x.deleted == false)
                        select new
                        {
                            itemID = i.ID,
                            itemName = i.Product_Number + " : " + i.ItemID + " : " + i.Name
                        }).OrderBy(x => x.itemName).ToList();

            var component = (from c in db.Components.Where(x => x.deleted == false)

                             select new
                             {
                                 compID = c.ID,
                                 compName = c.Product_Number + " : " + c.ComponentID + " : " + c.Name
                             }).OrderBy(x => x.compName).ToList();

            var part = (from c in db.Parts.Where(x => x.deleted == false)

                        select new
                        {
                            partID = c.ID,
                            partName = c.Product_Number + " : " + c.PartID + " : " + c.Name
                        }).OrderBy(x => x.partName).ToList();
            var sites = (from s in db.Sites
                         select new
                         {
                             siteID = s.ID,
                             siteName = s.Name
                         }).OrderBy(x => x.siteName).ToList();

            sites.Insert(0, new { siteID = 0, siteName = "Main Inventory" });

            var masters = db.Items.Where(x => x.Product_Number.Contains("106101") || x.ItemID.Contains("106101"));
            List<int> ids = new List<int>();
            foreach(Item i in masters.Where(x => x.Product_Number.Contains("BMU") || x.Product_Number.Contains("BMDU") || x.Product_Number.Contains("BMS")))
            {
                ids.Add(i.ID);
            }
            ViewBag.BMUMasters = ids.ToArray();
            ids = new List<int>();
            foreach (Item i in masters.Where(x => x.Product_Number.Contains("GMU")))
            {
                ids.Add(i.ID);
            }
            ViewBag.GMUMasters = ids.ToArray();
            ViewBag.ItemID = new SelectList(item, "itemID", "itemName");
            ViewBag.ComponentID = new SelectList(component, "compID", "compName");
            ViewBag.PartID = new SelectList(part, "partID", "partName");
            ViewBag.SalesOrderID = new SelectList(SOID, "SO_id", "status");
            ViewBag.SiteID = new SelectList(sites, "siteID", "siteName");
            ViewBag.invSiteID = new SelectList(sites, "siteID", "siteName");
            return View();
        }
EN

回答 1

Stack Overflow用户

发布于 2020-04-15 20:38:00

尝试添加空合并,如果ViewBag.itemOnHand为空,则返回0;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var itemOnHand = @(ViewBag.itemOnHand ?? 0);

然后,如果你打算用它做一些数字运算,试着把它变成一个整数;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var itemOnHand = Number(@(ViewBag.itemOnHand ?? 0));

因为在ViewBag赋值之前已经有了if语句或null检查,所以只需返回视图并添加ViewBag.Error即可;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (SO_Item != null)
{
   // .. if not null
}else{
   // if null return view
   ViewBag.Error = "your error here";
   return View();
}

然后在视图中的某个位置添加以下内容;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@if(ViewBag.Error != null){
   <div class="row error">
      <div class="col-md-12">
         Error occured: <strong>@ViewBag.Error</strong>
      </div>
   </div>
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61237353

复制
相关文章
MySQL -- 全表扫描
-- db1.t有200GB mysql -h$host -P$port -u$user -p$pwd -e "select * from db1.t" > $target_file 查询数据 Inn
猿哥
2019/03/19
2.9K0
MySQL -- 全表扫描
MYSQL 查询优化之路-之DISTINCT全表扫描
背景:今天对一个20w的表做关联查询,创建各种索引,没有提高执行的效率,使用EXPLAIN检查,总是提示“Using temporary”全表扫描,这不是我想的。通过度娘,各种百度,是因为DISTINCT使用了全表扫描,现在特别记录下来。以背查验。
用户5640963
2019/07/25
4.3K1
MySQL中的全表扫描案例
这两天看到了两种可能会导致全表扫描的sql,这里给大家看一下,希望可以避免踩坑:
AsiaYe
2019/11/06
2.7K0
MySQL 全表扫描成本计算
全表扫描成本作为参照物,用于和表的其它访问方式的成本做对比。任何一种访问方式,只要成本超过了全表扫描成本,就不会被使用。
csch
2022/12/20
8970
索引 vs 全表扫描
索引是数据库的重要技术,本质是用空间换时间,或者放慢写入加速查询。通常我们会将索引和全表扫描来对比,并且一般都会觉得全表扫描很 low,真的是这样吗?
Apache IoTDB
2020/09/27
1.2K0
索引 vs 全表扫描
高水位线和全表扫描
   高水位线好比水库中储水的水位线,用于描述数据库中段的扩展方式。高水位线对全表扫描方式有着至关重要的影响。当使用delete 操作 表记录时,高水位线并不会下降,随之导致的是全表扫描的实际开销并没有任何减少。本文给出高水位线的描述,如何降低高水位线,以及高水 位线对全表扫描的影响。
Leshami
2018/08/14
5140
mysql中创建表实例全析及查询基本操作
create table cats( id int not null auto_increment, pid int not null default '0', name varchar(60) not null default '', desn text not null default '', primary key(id), index name(name, pid) )engine=InnoDB default character set=utf8;
闵开慧
2018/03/30
1.5K0
MySQL 分表查询
分表是一种数据库分割技术,用于将大表拆分成多个小表,以提高数据库的性能和可管理性。在MySQL中,可以使用多种方法进行分表,例如基于范围、哈希或列表等。下面将详细介绍MySQL如何分表以及分表后如何进行数据查询。
孟斯特
2023/10/19
1.1K0
MySQL 分表查询
MySQL单表查询
3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
changxin7
2019/09/10
17.9K0
mysql 查询表结构
use information_schema; select * from columns where table_name='NODES';
大数据工程师-公子
2019/03/14
9.1K0
使用索引快速全扫描(Index FFS)避免全表扫描的若干场景
2. Index FFS只能通过CBO(Index hint强制使用CBO)获得。
bisal
2022/12/01
7250
MySQL跨表查询
    跨表查询适用于两个及两个以上的表中关联信息的数据,通过联系查询到表的联系!
十月梦想
2018/10/11
9.3K0
MySQL跨表查询
MySQL单表查询
MySQL之单表查询 创建表 # 创建表 mysql> create table company.employee5( id int primary key AUTO_INCREMENT not null, name varchar(30) not null, sex enum('male','female') default 'male' not null, hire_date date not null, post varchar(50) not null,
星哥玩云
2022/08/18
6.3K0
MongoDB 定位 oplog 必须全表扫描吗?
MongoDB oplog 记录数据库的所有修改操作,除了用于主备同步;oplog 还能玩出很多花样,比如
MongoDB中文社区
2019/08/20
1.6K0
MongoDB 定位 oplog 必须全表扫描吗?
MySQL之单表查询、多表查询
having的语法格式与where一致,只不过having是在分组之后进行的过滤,即where虽然不能用聚合函数,但是having可以!
py3study
2020/01/16
22K0
Mysql避免全表update
在测试的时候忘记写where条件导致全表更新的话,可以收拾包袱走人了 下面这条语句可以开启检查,当没有加where时拦截下来 set sql_safe_updates=1; 关闭: set sql_safe_updates=0;
DH镔
2019/12/20
2.7K0
mysql-单表查询
mysql> create table employee(id int primary key auto_increment,name  varchar(20) not null,sex enum('male','female') not null default 'male',age int(3) unsigned not null default 28,hire_date date not null,post varchar(50),post_comment varchar(100),salary  double(15,2),office int,depart_id int);
py3study
2018/08/03
4.3K0
MySQL子查询,联结表
子查询:嵌套在其他查询中;执行顺序由里到外。子查询数目没有限制,如果要使用多层查询,注意写好缩进格式,不要出错。
小末快跑
2019/07/03
4.5K0
mysql分表+分页查询
我们都知道,数据量大了,都要对数据库进行分库分表。奈何一直对分表及分表查询没什么概念,这里先不讲那么多概念,先直接演示一个demo。我们直接上车,请坐稳扶好。
用户10002156
2023/08/07
4820
mysql分表+分页查询
点击加载更多

相似问题

MySql - JOIN查询的全表扫描

28

MySQL全表扫描

12

禁止MySQL对查询使用全表扫描

23

Mysql子句全表扫描

12

如何避免对MySQL查询进行全表扫描

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文