I have used Master Entry Details in ASP.NET to enter project components and its component activities into table component and component_activity, but while saving the data the db.SaveChanges return me an error which i could not understand how to solve it. please help me. thanks
my Controller:
[HttpPost]
public JsonResult SaveComponent(PcomponentsVM pc)
{
try
{
bool status = false;
if (ModelState.IsValid)
{
using (Entities db = new Entities())
{
Pcomponent comp = new Pcomponent { title = pc.title, description = pc.description };
foreach (var i in pc.ComponentActivities)
{
comp.ComponentActivities.Add(i);
}
db.Pcomponents.Add(comp);
db.SaveChanges();
status = true;
}
}
else
{
status = false;
}
return new JsonResult { Data = new { status = status } };
}
catch (Exception ex)
{
return null;
}
}
my Component Model View
public partial class Pcomponent
{
public Pcomponent()
{
this.ComponentActivities = new HashSet<ComponentActivity>();
}
[Key]
public int id { get; set; }
public int project_id { get; set; }
public string title { get; set; }
public string description { get; set; }
public virtual ICollection<ComponentActivity> ComponentActivities { get; set; }
}
My Component Acivitiy Model
public partial class ComponentActivity
{
[Key]
public int id { get; set; }
public int component_id { get; set; }
public int activity_id { get; set; }
public int contracted_unit { get; set; }
public int unit { get; set; }
public decimal unit_cost { get; set; }
public virtual Pcomponent Pcomponent { get; set; }
}
My Virtual View Model
public class PcomponentsVM
{
public int id { set; get; }
public string title { set; get; }
public int project_id { set; get; }
public string description { set; get; }
public List<ComponentActivity> ComponentActivities { get; set; }
}
My Script
<script>
$(document).ready(function () {
var orderItems = [];
//Add button click function
$('#add').click(function () {
//Check validation of order item
var isValidItem = true;
if ($('#activityName').val().trim() == '') {
isValidItem = false;
$('#activityName').siblings('span.error').css('visibility', 'visible');
}
else {
$('#activityName').siblings('span.error').css('visibility', 'hidden');
}
if (!($('#cunit').val().trim() != '' && !isNaN($('#cunit').val().trim()))) {
isValidItem = false;
$('#cunit').siblings('span.error').css('visibility', 'visible');
}
else {
$('#cunit').siblings('span.error').css('visibility', 'hidden');
}
if (!($('#unit').val().trim() != '' && !isNaN($('#unit').val().trim()))) {
isValidItem = false;
$('#unit').siblings('span.error').css('visibility', 'visible');
}
else {
$('#rate').siblings('span.error').css('visibility', 'hidden');
}
//Add item to list if valid
if (isValidItem) {
orderItems.push({
activity_id: parseInt($('#activityName').val().trim()),
contracted_unit: parseInt($('#cunit').val().trim()),
unit: parseInt($('#unit').val().trim()),
unit_cost: parseInt($('#cunit').val().trim()) * parseInt($('#unit').val().trim())
});
//Clear fields
$('#activityName').val('').focus();
$('#cunit,#unit').val('');
}
//populate order items
GeneratedItemsTable();
});
//Save button click function
$('#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 ($('#title').val().trim() == '') {
$('#title').siblings('span.error').css('visibility', 'visible');
isAllValid = false;
}
else {
$('#title').siblings('span.error').css('visibility', 'hidden');
}
/* if ($('#orderDate').val().trim() == '') {
$('#orderDate').siblings('span.error').css('visibility', 'visible');
isAllValid = false;
}
else {
$('#orderDate').siblings('span.error').css('visibility', 'hidden');
}*/
//Save if valid
if (isAllValid) {
var data = {
title: $('#title').val().trim(),
// OrderDate: $('#orderDate').val().trim(),
//Sorry forgot to add Description Field
description: $('#description').val().trim(),
ComponentActivities: orderItems
}
$(this).val('Please wait...');
$.ajax({
url: '/Pcomponents/SaveComponent',
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 = [];
$('#title').val('');
//$('#orderDate').val('');
$('#orderItems').empty();
}
else {
alert('Failed');
}
$('#submit').val('Save');
},
error: function () {
alert('Error. Please try again.');
$('#submit').val('Save');
}
});
}
});
//function for show added items in table
function GeneratedItemsTable() {
if (orderItems.length > 0)
{
var $table = $('<table/>');
$table.append('<thead><tr><th>Activity Name</th><th>Contracted Unit</th><th>Unit</th><th>Total</th><th></th></tr></thead>');
var $tbody = $('<tbody/>');
$.each(orderItems, function (i, val) {
var $row = $('<tr/>');
$row.append($('<td/>').html(val.activity_id));
$row.append($('<td/>').html(val.contracted_unit));
$row.append($('<td/>').html(val.unit));
$row.append($('<td/>').html(val.unit_cost));
var $remove = $('<a href="#">Remove</a>');
$remove.click(function (e) {
e.preventDefault();
orderItems.splice(i, 1);
GeneratedItemsTable();
});
$row.append($('<td/>').html($remove));
$tbody.append($row);
});
console.log("current", orderItems);
$table.append($tbody);
$('#orderItems').html($table);
}
else {
$('#orderItems').html('');
}
}
});
</script>
Error
View Screen Short