[CustomeAuthorizeForAjaxAndNonAjax(Roles = "AddOrEditOrder")] //This method is called using ajax requests so authorize it with the custome attribute we created for the logged in users with the appropriate role. public async Task <IActionResult> AddOrEdit(int id, [Bind("Id,BuyerEmail,OrderDate,ShipToAddressFirstName,ShipToAddressLastName,ShipToAddressStreet,ShipToAddressCity,ShipToAddressState,ShipToAddressZipcode,DeliveryMethodId,Subtotal,Status,PaymentIntentId")] Order Model) { if (ModelState.IsValid) { //Create if (id == 0) { _context.Add(Model); await _context.SaveChangesAsync(); } //Update else { try { _context.Update(Model); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!OrderModelModelExists(Model.Id)) { return(NotFound()); } else { throw; } } } //After the successfull Create or Edit, we do not return a view because we already did the Create or Edit using Ajax request, //which means we did not reload the page, so return the _ViewAll.cshtml which has the html table, return it as serialized html in json file, to be rendered in Index.cshtml as a partial view: return(Json(new { isValid = true, html = SerializeHtmlElemtnsToString.RenderRazorViewToString(this, "_ViewAll", _context.Orders.Include(p => p.DeliveryMethod).ToList()) })); //in Index.cshtml we are displaying the DeliveryMethod ShortName, not Id, so return the DeliveryMethod all info using .Include(p => p.DeliveryMethod) //return NotFound(); } //if the model submitted is not valid according to the Attriburtes in [] in the model file in Models folder: return(Json(new { isValid = false, html = SerializeHtmlElemtnsToString.RenderRazorViewToString(this, "AddOrEdit", Model) })); }
[CustomeAuthorizeForAjaxAndNonAjax(Roles = "AddOrEditDeliveryMethod")] //This method is called using ajax requests so authorize it with the custome attribute we created for the logged in users with the appropriate role. public async Task <IActionResult> AddOrEdit(int id, [Bind("Id,ShortName,DeliveryTime,Description,Price")] DeliveryMethod Model) { if (ModelState.IsValid) { //Create if (id == 0) { _context.Add(Model); await _context.SaveChangesAsync(); } //Update else { try { _context.Update(Model); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!DeliveryMethodModelModelExists(Model.Id)) { return(NotFound()); } else { throw; } } } //After the successfull Create or Edit, we do not return a view because we already did the Create or Edit using Ajax request, //which means we did not reload the page, so return the _ViewAll.cshtml which has the html table, return it as serialized html in json file, to be rendered in Index.cshtml as a partial view: return(Json(new { isValid = true, html = SerializeHtmlElemtnsToString.RenderRazorViewToString(this, "_ViewAll", _context.DeliveryMethods.ToList()) })); //return NotFound(); } //if the model submitted is not valid according to the Attriburtes in [] in the model file in Models folder: return(Json(new { isValid = false, html = SerializeHtmlElemtnsToString.RenderRazorViewToString(this, "AddOrEdit", Model) })); }
[CustomeAuthorizeForAjaxAndNonAjax(Roles = "AddOrEditProduct")] //This method is called using ajax requests so authorize it with the custome attribute we created for the logged in users with the appropriate role. public async Task <IActionResult> AddOrEdit(int id, [Bind("Id,Name,Description,Price,PictureUrl,ProductTypeId,ProductBrandId")] Product Model, IFormFile Picture) { if (ModelState.IsValid) { //Create if (id == 0) { //upload a picture then save its path in the db table column : //note that blogImg is a parameter above in the function brackets: if (Picture != null && Picture.Length > 0) { //the method _upload saves the picture in a folder and returns its path. string PictureUrl = await _upload.UploadFile(Picture, "images/products"); Model.PictureUrl = PictureUrl; } _context.Add(Model); await _context.SaveChangesAsync(); } //Update else { try { //upload a picture then save its path in the db table column : //note that blogImg is a parameter above in the function brackets: if (Picture != null && Picture.Length > 0) { //the method _upload saves the picture in a folder and returns its path. string PictureUrl = await _upload.UploadFile(Picture, "images/products"); Model.PictureUrl = PictureUrl; } _context.Update(Model); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ProductModelModelExists(Model.Id)) { return(NotFound()); } else { throw; } } } //After the successfull Create or Edit, we do not return a view because we already did the Create or Edit using Ajax request, //which means we did not reload the page, so return the _ViewAll.cshtml which has the html table, return it as serialized html in json file, to be rendered in Index.cshtml as a partial view: return(Json(new { isValid = true, html = SerializeHtmlElemtnsToString.RenderRazorViewToString(this, "_ViewAll", _context.Products.Include(p => p.ProductBrand).Include(p => p.ProductType).ToList()) })); //in Index.cshtml we are displaying the Brand Name and Type Name, not Id, so return the Brand and Type all info using .Include(p => p.ProductBrand).Include(p => p.ProductType) //return NotFound(); } //if the model submitted is not valid according to the Attriburtes in [] in the model file in Models folder: return(Json(new { isValid = false, html = SerializeHtmlElemtnsToString.RenderRazorViewToString(this, "AddOrEdit", Model) })); }