public class IndexModel : PageModel
{
private DBCtx Context { get; }
public IndexModel(DBCtx _context)
{
this.Context = _context;
}
public List<CustomerModel> Customers { get; set; }
public void OnGet()
{
this.Customers = this.Context.Customers.ToList();
this.Customers.Insert(0, new CustomerModel());
}
[ValidateAntiForgeryToken]
public JsonResult OnPostInsertCustomer(CustomerModel customer)
{
this.Context.Customers.Add(customer);
this.Context.SaveChanges();
return new JsonResult(customer);
}
[ValidateAntiForgeryToken]
public EmptyResult OnPostDeleteCustomer(int CustomerId)
{
CustomerModel customer = (from c in this.Context.Customers
where c.CustomerId == CustomerId
select c).FirstOrDefault();
this.Context.Customers.Remove(customer);
this.Context.SaveChanges();
return new EmptyResult();
}
}
@page
@model Add_Delete_Rows_Table_Core_Razor.Pages.IndexModel
@using Add_Delete_Rows_Table_Core_Razor.Models
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
@Html.AntiForgeryToken()
<table id="tblCustomers" class="table" cellpadding="0" cellspacing="0">
<tr>
<th style="width:100px">Customer Id</th>
<th style="width:150px">Name</th>
<th style="width:150px">Country</th>
<th style="width:40px"></th>
</tr>
@foreach (CustomerModel customer in Model.Customers)
{
<tr>
<td class="CustomerId">
<span>@customer.CustomerId</span>
</td>
<td class="Name">
<span>@customer.Name</span>
</td>
<td class="Country">
<span>@customer.Country</span>
</td>
<td>
<a class="Delete" id="btnDelete" href="javascript:;">Delete</a>
</td>
</tr>
}
</table>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td style="width: 150px">
Name<br />
<input type="text" id="txtName" style="width:140px" />
</td>
<td style="width: 150px">
Country:<br />
<input type="text" id="txtCountry" style="width:140px" />
</td>
<td style="width: 200px">
<br />
<input type="button" id="btnAdd" value="Add" />
</td>
</tr>
</table>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
//Remove the dummy row if data present.
if ($("#tblCustomers tr").length > 2) {
$("#tblCustomers tr:eq(1)").remove();
} else {
var row = $("#tblCustomers tr:last-child");
row.find(".Delete").hide();
row.find("span").html(' ');
}
});
$("body").on("click", "#btnAdd", function () {
var name = $("#txtName").val();
var country = $("#txtCountry").val();
var token = $('input:hidden[name="__RequestVerificationToken"]').val();
$.ajax({
type: "POST",
url: "/Index?handler=InsertCustomer",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN", token);
},
data: { Name: name, Country: country },
success: function (r) {
var row = $("#tblCustomers tr:last-child");
if ($("#tblCustomers tr:last-child span").eq(0).html() != " ") {
row = row.clone();
}
AppendRow(row, r.CustomerId, r.Name, r.Country);
txtName.val("");
txtCountry.val("");
},
error: function (response) {
alert(response.responseText);
}
});
});
function AppendRow(row, customerId, name, country) {
//Bind CustomerId.
$(".CustomerId", row).find("span").html(customerId);
//Bind Name.
$(".Name", row).find("span").html(name);
$(".Name", row).find("input").val(name);
//Bind Country.
$(".Country", row).find("span").html(country);
$(".Country", row).find("input").val(country);
row.find(".Delete").show();
$("#tblCustomers").append(row);
};
$("body").on("click", "#tblCustomers .Delete", function () {
if (confirm("Do you want to delete this row?")) {
var row = $(this).closest("tr");
var token = $('input:hidden[name="__RequestVerificationToken"]').val();
$.ajax({
type: "POST",
url: "/Index?handler=DeleteCustomer",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN", token);
},
data: { CustomerId: row.find("span").html() },
success: function (r) {
if ($("#tblCustomers tr").length > 2) {
row.remove();
} else {
row.find(".Delete").hide();
row.find("span").html(' ');
}
},
error: function (response) {
alert(response.responseText);
}
});
}
});
</script>
</body>
</html>