Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC删除过程_C#_Mysql_Asp.net_Asp.net Mvc - Fatal编程技术网

C# MVC删除过程

C# MVC删除过程,c#,mysql,asp.net,asp.net-mvc,C#,Mysql,Asp.net,Asp.net Mvc,测试一个网站。当以管理员身份登录时,用户应该能够删除服务。一项服务可以有称为“服务选项”的子类别,以及低于“服务选项项”的子类别。当管理员试图永久删除服务时,他/她会收到以下服务器错误 我做了一些研究,发现可能需要先删除子类别,我相信代码反映了这一点 控制器 // // GET: /Service/Delete [Authorize(Roles = "admin")] public ActionResult Delete(int id) {

测试一个网站。当以管理员身份登录时,用户应该能够删除服务。一项服务可以有称为“服务选项”的子类别,以及低于“服务选项项”的子类别。当管理员试图永久删除服务时,他/她会收到以下服务器错误

我做了一些研究,发现可能需要先删除子类别,我相信代码反映了这一点

控制器

 //
    // GET: /Service/Delete

    [Authorize(Roles = "admin")]
    public ActionResult Delete(int id)
    {
        Service serviceToDelete = db.Services.Where(s => s.ServiceId == id).Single();
        return View(serviceToDelete);
    }

    //
    // POST: /Service/Delete

    [HttpPost, ActionName("Delete")]
    public ActionResult DeleteConfirm(int id)
    {
        var serviceToDelete = db.Services.Where(s => s.ServiceId == id).Single();

        // remove the service option items
        var serviceOptionItems = db.ServiceOptionItems.Where(soi => soi.ServiceOption.ServiceId == serviceToDelete.ServiceId);
        foreach (var serviceOptionItem in serviceOptionItems)
        {
            db.ServiceOptionItems.Remove(serviceOptionItem);
        }

        // remove the service options
        var serviceOptions = db.ServiceOptions.Where(so => so.ServiceId == serviceToDelete.ServiceId);
        foreach (var serviceOption in serviceOptions)
        {
            db.ServiceOptions.Remove(serviceOption);
        }

        // remove the service
        db.Services.Remove(serviceToDelete);

        // save all changes
        db.SaveChanges();
        return RedirectToAction("Index", new { manage = "yes", mode = "all" });
    }
看法

@model YardLad.Models.Domain.Service
@{
ViewBag.Title=“删除服务”;
}
$(文档).ready(函数(){
var isConfirmed=false;
$(“表格”)。提交(功能(e){
如果(!已确认)
{
$(“#对话框确认”)。对话框({
可调整大小:false,
身高:140,
莫代尔:是的,
按钮:{
“是”:函数(){
$(此).dialog(“关闭”);
isConfirmed=true;
$(“#删除服务”).submit();
},
取消:函数(){
$(此).dialog(“关闭”);
}
}
});
e、 预防默认值();
返回false;
}
其他的
{
返回true;
}
});
});
删除
是否确实要删除此服务?
服务类别
@DisplayFor(m=>m.ServiceCategory.Name)
名称
@DisplayFor(m=>m.Name)
描述
@if(Model.Description==null)
{
@:无描述
}
其他的
{
@DisplayFor(m=>m.Description)
}
底价
@DisplayFor(m=>m.BasePrice)
是活跃的
@DisplayFor(m=>m.IsActive)
@使用(Html.BeginForm(“Delete”,“Service”,null,FormMethod.Post,new{id=“deleteService”}))
{

} @ActionLink(“Back”,“Index”,new{manage=“yes”}) 此服务将被永久删除,无法恢复。你确定吗

模型

使用系统;
使用System.Collections.Generic;
使用System.ComponentModel.DataAnnotations;
使用System.Linq;
使用System.Web;
使用YardLad.Models.Domain;
名称空间YardLad.Models.View
{
公共类ServiceViewModel
{
[显示(Name=“服务Id”)]
public int ServiceId{get;set;}
[必需(ErrorMessage=“请输入名称”)]
公共字符串名称{get;set;}
[UIHint(“multilitext”)]
公共字符串说明{get;set;}
[显示(Name=“基本价格”)]
公共十进制基价{get;set;}
[显示(Name=“服务类别”)]
[必需(ErrorMessage=“请选择一个类别”)]
公共int-ServiceCategoryId{get;set;}
[显示(Name=“是否激活?”)]
公共bool IsActive{get;set;}
[显示(Name=“服务选项”)]
公共列表服务选项{get;set;}
}
公共类RequestServiceViewModel
{
[必需(ErrorMessage=“请选择一个状态”)]
public int StateId{get;set;}
[必需(ErrorMessage=“请选择服务区域”)]
公共int ServiceAreaId{get;set;}
[必需(ErrorMessage=“请选择服务”)]
public int ServiceId{get;set;}
[必需(ErrorMessage=“请指明所选项目”)]
公共字符串[]SelectedServiceOptionitMids{get;set;}
[必需(ErrorMessage=“请指明可用于请求的承包商”)]
公共字符串[]AvailableTractorID{get;set;}
公共状态SelectedState{get;set;}
公共服务区SelectedServiceArea{get;set;}
公共服务SelectedService{get;set;}
公共列表SelectedServiceOptions{get;set;}
公共列表SelectedServiceOptionItems{get;set;}
公共列表可用{get;set;}
public int SelectedContractorId{get;set;}
公共承包商选择承包商{get;set;}
public int selectedContractor服务ID{get;set;}
公共ContractorService SelectedContractorService{get;set;}
公共十进制小计{get;set;}
公共十进制税{get;set;}
公共十进制SelectedContractorTaxRate{get;set;}
公共十进制总数{get;set;}
公共bool UserIsLoggedIn{get;set;}
public int UserAddressId{get;set;}
公共地址用户地址{get;set;}
public bool CreateCustomAddress{get;set;}
公共地址自定义地址{get;set;}
}
公共类SelectContractor视图模型
{
公共int ServiceAreaId{get;set;}
公共服务区SelectedServiceArea{get;set;}
public int ServiceId{get;set;}
公共服务SelectedService{get;set;}
公共列表服务选项{get;set;}
公共列表ServiceOptionItems{get;set;}
公共列表可用{get;set;}
公共承包商选择承包商{get;set;}
public int ContractorTypeId{get;set;}
public int ContractorServiceId{get;set;}
公共ContractorService SelectedContractorService{get;set;}
公共列表承包商服务选项{get;set;}
公共列表订约人服务选项{get;set;}
公共十进制小计{get;set;}
公共十进制税{get;set;}
公共十进制SelectedContractorTaxRate{get;set;}
公共十进制总数{get;set;}
}
}
DB关系的图像:


感谢您阅读

您对表
服务
服务选项
服务选项
有外键约束。因此,您必须先删除该服务的所有
服务选项项
服务选项
,然后才能删除
服务

但是如果您有这样的需求,我建议您在添加约束时在DELETE CASCADE上使用
。因此,它将允许您直接删除服务,并将自动删除所有子项
ServiceOptions
ServiceOptions项目

更多信息:

来自
@model YardLad.Models.Domain.Service

@{
ViewBag.Title = "Delete Service";
}

<script>
$(document).ready(function () {
    var isConfirmed = false;

    $("form").submit(function (e) {
        if (!isConfirmed)
        {
            $("#dialog-confirm").dialog({
                resizable: false,
                height: 140,
                modal: true,
                buttons: {
                    "Yes": function () {
                        $(this).dialog("close");
                        isConfirmed = true;
                        $("#deleteService").submit();
                    },
                    Cancel: function () {
                        $(this).dialog("close");
                    }
                }
            });

            e.preventDefault();
            return false;
        }
        else
        {
            return true;
        }
    });
});
 </script>

<h2>Delete</h2>

<h3>Are you sure you want to delete this service?</h3>

<div class="display-label">Service Category</div>
<div class="display-field">
@Html.DisplayFor(m => m.ServiceCategory.Name)
</div>

<div class="display-label">Name</div>
<div class="display-field">
@Html.DisplayFor(m => m.Name)
</div>

<div class="display-label">Description</div>
<div class="display-field">
@if (Model.Description == null)
{
    @:No Description
}
else
{
    @Html.DisplayFor(m => m.Description)
}

</div>

<div class="display-label">Base Price</div>
<div class="display-field">
@Html.DisplayFor(m => m.BasePrice)
</div>

<div class="display-label">Is Active</div>
<div class="display-field">
@Html.DisplayFor(m => m.IsActive)
</div>

@using (Html.BeginForm("Delete", "Service", null, FormMethod.Post, new { id = "deleteService" }))
{
<p>
    <input type="submit" id="btnSubmit" value="Delete" />
</p>
}

<div>
@Html.ActionLink("Back", "Index", new { manage = "yes" })
</div>


<div id="dialog-confirm" title="Delete this service?" class="hidden">
<p>This service will be permanently deleted and cannot be recovered. Are you     sure?</p>
</div>
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using YardLad.Models.Domain;

namespace YardLad.Models.View
{
public class ServiceViewModel
{
    [Display(Name = "Service Id")]
    public int ServiceId { get; set; }

    [Required(ErrorMessage = "please enter a name")]
    public string Name { get; set; }

    [UIHint("multilinetext")]
    public string Description { get; set; }

    [Display(Name = "Base Price")]
    public decimal BasePrice { get; set; }

    [Display(Name = "Service Category")]
    [Required(ErrorMessage = "please select a category")]
    public int ServiceCategoryId { get; set; }

    [Display(Name = "Is Active?")]
    public bool IsActive { get; set; }

    [Display(Name = "Service options")]
    public List<ServiceOption> ServiceOptions { get; set; }
}

public class RequestServiceViewModel
{
    [Required(ErrorMessage = "please select a state")]
    public int StateId { get; set; }

    [Required(ErrorMessage = "please select a service area")]
    public int ServiceAreaId { get; set; }

    [Required(ErrorMessage = "please select a service")]
    public int ServiceId { get; set; }

    [Required(ErrorMessage = "please indicate the items selected")]
    public string[] SelectedServiceOptionItemIds { get; set; }

    [Required(ErrorMessage = "please indicate the contractors available for the request")]
    public string[] AvailableContractorIds { get; set; }

    public State SelectedState { get; set; }
    public ServiceArea SelectedServiceArea { get; set; }
    public Service SelectedService { get; set; }
    public List<ServiceOption> SelectedServiceOptions { get; set; }
    public List<ServiceOptionItem> SelectedServiceOptionItems { get; set; }
    public List<Contractor> AvailableContractors { get; set; }

    public int SelectedContractorId { get; set; }
    public Contractor SelectedContractor { get; set; }

    public int SelectedContractorServiceId { get; set; }
    public ContractorService SelectedContractorService { get; set; }

    public decimal SubTotal { get; set; }
    public decimal Tax { get; set; }
    public decimal SelectedContractorTaxRate { get; set; }
    public decimal Total { get; set; }

    public bool UserIsLoggedIn { get; set; }
    public int UserAddressId { get; set; }
    public Address UserAddress { get; set; }
    public bool CreateCustomAddress { get; set; }
    public Address CustomAddress { get; set; }
}

public class SelectContractorViewModel
{
    public int ServiceAreaId { get; set; }
    public ServiceArea SelectedServiceArea { get; set; }
    public int ServiceId { get; set; }
    public Service SelectedService { get; set; }
    public List<ServiceOption> ServiceOptions { get; set; }
    public List<ServiceOptionItem> ServiceOptionItems { get; set; }

    public List<Contractor> AvailableContractors { get; set; }

    public Contractor SelectedContractor { get; set; }
    public int ContractorTypeId { get; set; }
    public int ContractorServiceId { get; set; }
    public ContractorService SelectedContractorService { get; set; }
    public List<ContractorServiceOption> ContractorServiceOptions { get; set; }
    public List<ContractorServiceOptionItem> ContractorServiceOptionItems { get; set; }

    public decimal SubTotal { get; set; }
    public decimal Tax { get; set; }
    public decimal SelectedContractorTaxRate { get; set; }
    public decimal Total { get; set; }
}
}
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirm(int id)
{
    var serviceToDelete = db.Services.Where(s => s.ServiceId == id).Single();

    // remove the service option items
    var serviceOptionItems = db.ServiceOptionItems.Where(soi => soi.ServiceOption.ServiceId == serviceToDelete.ServiceId);
    foreach (var serviceOptionItem in serviceOptionItems)
    {
        db.ServiceOptionItems.Remove(serviceOptionItem);
        db.Entry(serviceOptionItem).State = EntityState.Deleted;
    }

    // remove the service options
    var serviceOptions = db.ServiceOptions.Where(so => so.ServiceId == serviceToDelete.ServiceId);
    foreach (var serviceOption in serviceOptions)
    {
        db.ServiceOptions.Remove(serviceOption);
        db.Entry(serviceOption).State = EntityState.Deleted;
    }

    // remove the contractor services
    var contractorServices = db.ContractorServices.Where(so => so.ServiceId == serviceToDelete.ServiceId);
    foreach (var contractorService in contractorServices)
    {
        db.ContractorServices.Remove(contractorService);
        db.Entry(contractorService).State = EntityState.Deleted;
    }

    // remove the service
    db.Services.Remove(serviceToDelete);

    // save all changes
    db.SaveChanges();
    return RedirectToAction("Index", new { manage = "yes", mode = "all" });
}