如何在列表中自动生成新的Guid<;费用>;并使用Asp.NetMVC将值传递给Controller的forea

本文关键字:NetMVC Asp Controller forea 值传 费用 列表 自动生成 lt Guid gt | 更新日期: 2023-09-27 18:25:45

我是asp.net mvc的新手。如何在foreach循环内自动生成新的Guid?我在视图模型中使用List<Expense>,GUID作为PrimaryKey,如何从数据表插入多行到数据库插入?

这是我的视图模型。我可以插入一行数据,但如果我插入多行数据,它会显示如下错误:

违反PRIMARY KEY约束"PK__Expense__EBE72675160F4887"。无法在对象"dbo.Expense"中插入重复的键。''r''n语句已终止。

 public System.Guid MaintenanceId { get; set; }
    public System.Guid ExpenseSummaryId { get; set; }
    public string BillNo { get; set; }
    public Nullable<System.DateTime> BillDate { get; set; }
    public string VechicleNo { get; set; }
    public string ServiceType { get; set; }
    public Nullable<double> Amount { get; set; }
    public string Reason { get; set; }
    public Nullable<System.Guid> UserRightsId { get; set; }
    public Nullable<System.Guid> EmployeeId { get; set; }
    public string ProviderName { get; set; }
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string ProviderCity { get; set; }
    public string ProviderState { get; set; }
    public string ProviderCountry { get; set; }
    public string Pincode { get; set; }
    public int Sno { get; set; }
    public Nullable<bool> IsActive { get; set; }
    public Nullable<bool> IsDeleted { get; set; }
    public Nullable<System.DateTime> CreatedDate { get; set; }
    public Nullable<System.DateTime> EditedDate { get; set; }
    public Nullable<System.DateTime> LastActiveOn { get; set; }
    public Nullable<System.Guid> RowID { get; set; }
    public Nullable<System.Guid> CreatedSessionID { get; set; }
    public Nullable<System.Guid> EditedSessionID { get; set; }
    public Nullable<bool> OfflineMode { get; set; }
    public Nullable<System.Guid> OfflineID { get; set; }
    public List<Expense> Expenses { get; set; }
    public virtual Employee Employee { get; set; }
    public virtual UserRight UserRight { get; set; }

这是我的控制器

  public JsonResult SaveOrder(TruckVM TVM)
    {
        bool status = false;
      if (ModelState.IsValid)
        {
         using (TestDBEntities db = new TestDBEntities())
            {
              var guid = Guid.NewGuid();
              maintenance ObjMaintenance = new maintenance 
                { 
                 MaintenanceId=guid,
                 BillNo=TVM.BillNo,
                 BillDate=TVM.BillDate,
                 Amount=TVM.Amount
                 };                   
                foreach (var i in TVM.Expenses)
                {
                    ObjMaintenance.Expenses.Add(i);
                }
                db.maintenances.Add(ObjMaintenance);
                //db.serviceproviders.Add(ObjServiceProvider);
                db.SaveChanges();
                status = true;
            }
        }
        else
        {
            status = false;
        }
        return new JsonResult { Data = new  { status = status } };
    }`   

这是我的

 $(document).ready(function () {
        var orderItems = [];
        $('#add').click(function () {
            var isValidItem = true;
            
       
            if ($('#Particulars').val().trim() == '') {
                isValidItem = false;
                $('#Particulars').siblings('span.error').css('visibility', 'visible');
            }
            else {
                $('#Particulars').siblings('span.error').css('visibility', 'hidden');
            }
            if (!($('#qty').val().trim() != '' && !isNaN($('#qty').val().trim()))) {
                isValidItem = false;
                $('#qty').siblings('span.error').css('visibility', 'visible');
            }
            else {
                $('#qty').siblings('span.error').css('visibility', 'hidden');
            }
            if (!($('#unitprice').val().trim() != '' && !isNaN($('#unitprice').val().trim()))) {
                isValidItem = false;
                $('#unitprice').siblings('span.error').css('visibility', 'visible');
            }
            else {
                $('#unitprice').siblings('span.error').css('visibility', 'hidden');
            }
            //Add item to list if valid
            if (isValidItem) {
                orderItems.push({
                  
                    Particulars: $('#Particulars').val().trim(),
                    qty: parseInt($('#qty').val().trim()),
                    unitprice: parseFloat($('#unitprice').val().trim()),
                    TotalAmount: parseInt($('#qty').val().trim()) * parseFloat($('#unitprice').val().trim())
                });
                //Clear fields
                $('#Particulars').val('').focus();
                $('#qty').val('')
                $('#unitprice').val('')
            }
            GeneratedItemsTable();
        });
        $('#submit').click(function () {
            //validation of order
            var isAllValid = true;
            if (orderItems.length == 0) {
                $('#orderItems').html('<span style="color:red;">Please add order items</span>');
                isAllValid = false;
            }
            if ($('#BillNo').val().trim() == '') {
                $('#BillNo').siblings('span.error').css('visibility', 'visible');
                isAllValid = false;
            }
            else {
                $('#BillNo').siblings('span.error').css('visibility', 'hidden');
            }
            if ($('#BillDate').val().trim() == '') {
                $('#BillDate').siblings('span.error').css('visibility', 'visible');
                isAllValid = false;
            }
            else {
                $('#BillDate').siblings('span.error').css('visibility', 'hidden');
            }
            //Save if valid
            if (isAllValid) {
                var data = {
                    BillNo: $('#BillNo').val().trim(),
                    BillDate: $('#BillDate').val().trim(),
                    Amount: $('#Amount').val().trim(),
                    Expenses: orderItems
                }
                $(this).val('Please wait...');
                $.ajax({
                    url: '/VechicleMaintenance/SaveOrder',
                    type: "POST",
                    data: JSON.stringify(data),
                    dataType: "JSON",
                    contentType: "application/json",
                    success: function (d) {
                        //check is successfully save to database 
                        if (d.status == true) {
                            //will send status from server side
                            alert('Successfully done.');
                            //clear form
                            orderItems = [];
                            $('#BillNo').val('');
                            $('#BillDate').val('');
                            $('#orderItems').empty();
                        }
                        else {
                            alert('Failed');
                        }
                        $('#submit').val('Save');
                    },
                    error: function () {
                        alert('Error. Please try again.');
                        $('#submit').val('Save');
                    }
                });
            }
        });
        function GeneratedItemsTable() {
            if (orderItems.length > 0) {
                var $table = $('<table/>');
                $table.append('<thead><tr><th>Particulars</th><th>qty</th><th>unitprice</th><th>TotalAmount</th></tr></thead>');
                var $tbody = $('<tbody/>');
                $.each(orderItems, function (i, val) {
                    var $row = $('<tr/>');
                   
                    $row.append($('<td/>').html(val.Particulars));
                    $row.append($('<td/>').html(val.qty));
                    $row.append($('<td/>').html(val.unitprice));
                    $row.append($('<td/>').html(val.TotalAmount));
                    $tbody.append($row);
                });
                $table.append($tbody);
                $('#orderItems').html($table);
            }
        }
     
    });
 <table width="100%">
                <tr>
                   
                    <td>Particulars</td>
                    <td>qty</td>
                    <td>unitprice</td>
                    <td>&nbsp;</td>
                </tr>
              <tr>
                    <td>
                        <input type="text" id="Particulars" />
                        <span class="error">Item name required</span>
                    </td>
                    <td>
                        <input type="text" id="qty" />
                        <span class="error">Valid quantity required</span>
                    </td>
                    <td>
                        <input type="text" id="unitprice" />
                        <span class="error">Valid rate required</span>
                    </td>
                     <td>
                        <input type="button" id="add" value="add"    />
                    </td>
                </tr>
            </table>
            <div id="orderItems" class="tablecontainer">
            </div>
            <div style="padding:10px 0px; text-align:right">
                <input id="submit" type="button" value="Save" style="padding:10px 20px" />
            </div>

如何在列表中自动生成新的Guid<;费用>;并使用Asp.NetMVC将值传递给Controller的forea

您正在为ObjMaintenanceMaintenanceId属性生成一个新的Guid,但您并没有为要添加的每个Expenses对象的ID属性创建Guid。假设该属性名为ExpenseId,则循环需要是

....
maintenance ObjMaintenance = new maintenance 
{ 
    MaintenanceId = Guid.NewGuid(),
    ....
};                   
foreach (var i in TVM.Expenses)
{
    i.ExpenseId = Guid.NewGuid(); // add this
    ObjMaintenance.Expenses.Add(i);
}
db.maintenances.Add(ObjMaintenance);
db.SaveChanges();

附带说明:我建议您查看此处、此处和此处的答案,以便向集合中动态添加新项目,从而允许您在当前代码的1/10中动态添加、编辑和删除。