如何使用一个函数使用相同的按钮名称插入和更新

时间:2016-07-25 10:20:01

标签: javascript c# jquery asp.net-mvc insert-update

我有一个名为Save的按钮。当您从(Tab1)双击网格时。数据正被加载到文本框中,以便您可以在Tab2上进行编辑。因此我的所有字段都在Tab2上,允许您保存到数据库中。加载页面并单击Tab2时。您将填写所有文本框并单击“保存”按钮。现在我想使用名为Save的相同Tab2 abd按钮进行编辑,使用相同的功能

我想使用Save功能执行Insert和update。我怎样才能做到这一点。我确定它是一个if语句来检查Id,但我不知道该怎么做。

工作插入代码:

   public async Task<bool> AddFleet(FleetModel fleet)
    {
        bool IsDone = false;
        try
        {
            using (SidDbContext db = new SidDbContext())
            {
                FleetVehicle fv = new FleetVehicle()
                {
                    BranchId = fleet.BranchId,
                    Description = fleet.Description,
                    Registration = fleet.Registration

                };
                db.FleetVehicle.Add(fv);
                db.SaveChanges();

                Fleet _fleet = new Fleet
                {
                    FitmentTeamId = Convert.ToInt32(fleet.FitmentTeamId),
                    Capacity = fleet.Capacity,
                    BranchId = fleet.BranchId,
                    Active = true                     
                };
               var results = db.Fleet.Add(_fleet);
                db.SaveChanges();

                db.FleetVehicleLink.Add(new FleetVehicleLink { FleetId = _fleet.Id ,FleetVehicleId = fv .Id});
                db.SaveChanges();
                //add team

                foreach (var u in fleet.TeamMember1)
                {
                    db.FitmentUsersLink.Add(new FitmentUsersLink { FitmentTeamId = _fleet.Id, UsersId = u });                       
                }

                db.SaveChanges();

                IsDone = true;
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return IsDone = true;
    }

//

  function AddFleets() {

var multiSelect = $("#ddlTeamMember").data("kendoMultiSelect");   
var Fleet = {
    Id: 0,
    BranchId: $('#ddlOutlet').val(),
    Registration: $('#txtNewVehicle').val(),
    Description: $('#txtVehicleDescription').val(),
    FitmentTeamId: $('#ddlTeamName').val(),
    TeamMember1: multiSelect.value(),
    Capacity: $("#ddlCapacity").val(),
    Active: true
};

$.ajax({
    url: BaseUrl + "Fleet/AddFleet",
    global: false,
    type: 'Post',
    data: Fleet
});
success: function(data)
{
    alert('added successfully');
};
error: function(data)
{
    alert('error occurred');
}

}

4 个答案:

答案 0 :(得分:0)

创建变量标志。
检查数据是否已存在于数据库中。如果是,则设置flag = true,否则设置flat = false

现在您可以在标志上添加条件,如

if(flag=true) then
update query
else
insert query

希望它会有所帮助。

答案 1 :(得分:0)

您可以将类型参数传递给函数,以便在JavaScript端检查调用是用于插入还是更新。 防爆。传递类型参数的按钮

<input type="button" value="save" onclick="AddFleets(type)"/>

JavaScript代码如下所示

function AddFleets(type){

    if(type == "insert")
    {
       //Insert code
    }
    else
    {
       //update code
    }
}

答案 2 :(得分:0)

你应该创建一个方法&#34; InsertOrSave(bool isInsert)&#34;处理插入和添加功能, 和两个按钮点击处理程序(一个用于保存,另一个用于插入), 这个处理程序将使用适当的标志调用业务逻辑函数。

这样,您可以在业务逻辑和GUI逻辑之间进行分离。在将来,您可以更改处理程序方法(添加验证,记录,引发事件等),而不会影响业务逻辑

修改

在您的AddFleet方法中:

1)从fleetModel创建你的FleetVehicle(就像你现在一样),

2)检查数据库中是否存在FleetVehicle,如:

       FleetVehicle fv = new FleetVehicle()
                {
                    BranchId = fleet.BranchId,
                    Description = fleet.Description,
                    Registration = fleet.Registration

                };
     if (db.FleetVehicle.Contains(fv)
{
//update the item
}
else
{
//add the vehicle
}
db.SaveChanges()

注意

完成更改后,您应该只保存一次更改。 当您在using语句的上下文中时,您所做的所有更改都会聚合并存储在本地。呼叫&#34; SaveChanges()&#34;生成了对DB的调用,并且多次执行该操作是多余的。

答案 3 :(得分:0)

这是一项简单的任务,您可以这样做:

  1. 将新属性添加到bool类型的ViewModel,并初始化为false (例如:public bool IsEdit {get;set;} = false
  2. 视图中的
  3. 为此新属性添加隐藏字段; (例如:@Html.HiddenFor(m=>m.IsEdit);

  4. 在网格双击事件中,当您以编辑形式加载数据时,必须将IsEdit的值更改为true

  5. 在您的控制器中,您需要检查IsEdit = true然后进行更新,否则您插入新记录。
  6. 这也可以使用ID字段完成,你可以有一个隐藏字段,在控制器中检查ID&gt; 0是否更新,或者ID = 0,然后是新的!