结合观看

时间:2017-10-23 20:12:24

标签: c# asp.net-mvc

我正在使用脚手架,我想要没有什么是将List加载到我的模型中的最佳方法,例如我希望创建页面与编辑页面相同所以我需要一些方法来当我去用于引入产品图像的编辑操作。如果有所作为,我正在使用asp.net核心。

例如

我的产品型号将包含。

public class Products
{
    [Key]
    public int ProductId { get; set; }
    public List<ProductImages> ProductImages { get; set; }
}

我想要的不是我编辑的最佳方法是检测用户是否想要创建或编辑当前scafollidng创建这两种方法的记录。

// POST: Products/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [Authorize]
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("ProductId,ProductName,LongDescription,ShotDescription,OldPrice,NewPrice,DisableBuyButton,DisableWishListButton,ShowForPrice,NotReturnable,MinimumCartQty,MaximumCartQty,SKU,ShippingEnabled,Weight,Length,Width,Height,Categories,ManufacturerPartNumber,AvailableDate,AvailableEndDate,AdminComment,CreatedOn,UpdatedOn,DisplayAvailability,ExpectedDateBackOnStock,IsOnBackOrder,Warehouse,BinNumber,IlseNumber,IsGiftCard,IsDownloadableProduct,IsRental,SeoDescription,Stock,PropertyImageId")] Products products)
        {
            if (ModelState.IsValid)
            {


                products.UserId =  new Guid(User.Identity.GetUserId());
                _context.Add(products);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            return View(products);
        }

        // GET: Products/Edit/5
        public async Task<IActionResult> Edit(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }

            var products = await _context.Products.SingleOrDefaultAsync(m => m.ProductId == id);
            if (products == null)
            {
                return NotFound();
            }
            return View(products);
        }

在webforms之前,这本来很容易我只是检查了表单加载上的参数但是如何在mvc中实现相同的目标,以及如何重定向我的控制器以使用一个视图。而不是create.cshtml和edit.cshtml的两个单个文件。

Ps是否有更好的脚手架添加,以产生更多comptablle html与bootstrap?。

将创建和编辑结合起来也是一个很好的做法,因为它们基本上做了我不想对我创建的所有视图执行此操作的相同功能。

1 个答案:

答案 0 :(得分:0)

我认为我们没有脚手架模板来为这个场景生成代码......但是你改变了这样的动作方法..

// this method is to recieve first request and also edit request..  
        [HttpGet]
        public async Task<IActionResult> Create(int id)
        {
          Products products = new Products();
          if(id == 0) //here you can write create part
           {
              // code to bind something..
           }
          else //in else you can write edit part
           {
              products = GetProductById(id); // this is to get edit data..
           }

         return View(products);
        }
    // this post method will recieve data while creating and updating.
        [HttpPost]
        public async Task<IActionResult> Create(Products products)
        {
         if(products.ProductId == 0) 
           {
              CreateProduct(products); // record insertion procedure
           }
          else 
           {
              UpdateProduct(products); // record update procedure
           }
        }

这里我们只使用一个视图(Create.cshtml)进行创建和编辑。 并且不要忘记在视图中保留ProductId,此ProductId在创建记录时将具有值0,并且在更新时将具有1或2..etc(id值)

@Html.HiddenFor(model => model.ProductId)

通过这种方式,您可以使用两种操作方法创建,编辑和更新一种观点....