How to save dynamically added rows in MVC
This article shows How to add dynamically rows on button click event and save all the data into database using asp.net mvc
Here we are performing this problem using below example with detailed description.
|
|
|
|
|
|
|
|
|
|
|
|
|
Time In |
Time Out |
|
|
|
|
__________ |
___________ |
Add New |
|
|
|
__________ |
___________ |
Add New |
|
|
|
|
|
|
|
|
|
Save |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
In |
Out |
Duration |
Action |
|
|
09:30 |
12:30 |
03:00 |
Delete |
|
|
13:00 |
16:30 |
03:30 |
Delete |
|
|
16:45 |
19:00 |
02:15 |
Delete |
|
|
|
|
|
|
|
|
In Hours |
Out Hours |
First In |
Last Out |
|
|
08:45 |
00:45 |
09:30 |
19:00 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Here is the problem statement.
Clicking on Delete should ask for confirmation “Are you sure you want to delete?”. If the user says Yes, that entry should be deleted and update all calculated fields.
Please find Below steps :
1. Create Database Table :
CREATE TABLE [dbo].[TimeEntryDetail](
[TimeEntryId] [int] IDENTITY(1,1) NOT NULL,
[InTime] [time](7) NOT NULL,
[OutTime] [time](7) NOT NULL,
[Duration] [time](7) NOT NULL,
2. Add Using Database First Approach Data model in your application.
namespace Test.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public partial class TimeEntryDetail
{
public int TimeEntryId { get; set; }
[Display(Name ="In")]
public System.TimeSpan InTime { get; set; }
[Display(Name = "Out")]
public System.TimeSpan OutTime { get; set; }
public System.TimeSpan Duration { get; set; }
}
}
3. Add following code to view to add dynamic rows using jquery.
@model IEnumerable<Test.Models.TimeEntryDetail>
@using Test.Models
@{
ViewBag.Title = "Create";
}
<table id="tblTimeEntry" class="table" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th style="width:150px">Time In</th>
<th style="width:150px">Time Out</th>
<th></th>
</tr>
</thead>
<tbody>
@*@foreach (TimeEntryDetail timedetail in Model)
{
<tr>
<td>@timedetail.InTime</td>
<td>@timedetail.OutTime</td>
</tr>
}*@
</tbody>
<tfoot>
<tr>
<td><input type="time" id="txtInTime" /></td>
<td><input type="time" id="txtOutTime" /></td>
<td><input type="button" id="btnAdd" value="Add New" class="btn btn-primary" /></td>
</tr>
</tfoot>
</table>
<br />
<input type="button" id="btnSave" value="Save" class="btn btn-success" />
<br /><br />
@Html.ActionLink("Go to Time Entries", "Detail")
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>
<script type="text/javascript">
function validEntry()
{
var In = $("#txtInTime").val();
var Out = $("#txtOutTime").val();
if (In == "" || Out == "") {
alert("Please valid In and Out Entry both");
return false;
}
else { return true;}
}
$("body").on("click", "#btnAdd", function () {
if (validEntry() == true) {
var txtInTime = $("#txtInTime");
var txtOutTime = $("#txtOutTime");
var tBody = $("#tblTimeEntry > TBODY")[0];
var row = tBody.insertRow(-1);
var cell = $(row.insertCell(-1));
cell.html(txtInTime.val());
cell = $(row.insertCell(-1));
cell.html(txtOutTime.val());
txtInTime.val("");
txtOutTime.val("");
}
});
$("body").on("click", "#btnSave", function () {
var timeDetails = new Array();
$("#tblTimeEntry TBODY TR").each(function () {
var row = $(this);
var timedetail = {};
timedetail.InTime = row.find("TD").eq(0).html();
timedetail.OutTime = row.find("TD").eq(1).html();
timedetail.duration = (new Date(timedetail.OutTime) - new Date(timedetail.InTime));
timeDetails.push(timedetail);
});
//Send the JSON array to Controller using AJAX.
$.ajax({
type: "POST",
url: "/TimeEntry/Create",
data: JSON.stringify(timeDetails),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {
alert(r + " Entry(s) Added into Timesheet");
}
});
});
</script>
4. Add below following code to Controller.
[HttpPost]
public JsonResult Create(List<TimeEntryDetail> timeentrydetails)
{
using (DB_TechAvidusEntities db = new DB_TechAvidusEntities())
{
if (timeentrydetails == null)
{
timeentrydetails = new List<TimeEntryDetail>();
}
foreach (TimeEntryDetail detail in timeentrydetails)
{
db.TimeEntryDetails.Add(detail);
}
int insertedRecords = db.SaveChanges();
return Json(insertedRecords,JsonRequestBehavior.AllowGet);
}
}
No comments:
Post a Comment