Introduction
This artcile shows how to make a CRUD operation in single View using Javascript in MVC and searching data(Filteration) from the Json file.
Start
This article covers how to make a CRUD (Create, Edit , Update , Delete, Details) operation in a single view(page) using javascript and Ajax calls in MVC. And also how to create Json File and filteration(Searching) data from json file.
Also I am using Entity Framework for this sample project.
So create and Asp.Net project.Follow the Following Steps
- Open Visual Studio.Select New Project.
- In Visual C# tab select Asp.Net web application.
- Now Select an Empty Project. And in "Add folders and core reference for:" section select MVC. And select OK.
- Now Right Click on your Solution and another Project as a Class Library (as i am using Entity Framework).
- Add a Class in that Class Library as below
public class Users
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string Phone_Number { get; set; }
}
Now right click on your class library and Install Entity Framework via Nuget.
Now add folder in class library named as Context and add a Class in it as below.
public class JsonContext:DbContext
{
public DbSet<Users> ObjUser { get; set; }
}
Now in Web.Config file of Project add the following Connection string.
<connectionStrings>
<add name="JsonContext" connectionString="Provide your credentials" providerName="System.Data.SqlClient" />
</connectionStrings>
Now add the Class library in a reference of your Project.And build the Solution.
Add the Empty Controller.In controllers folder of the Project.
Add the following ActionResult Method to your Controller
public ActionResult Index()
{
using (JsonContext context = new JsonContext())
{
return View(context.ObjUser.ToList()); }
}
Now in the view of the Index method
for displaying the list of the user in a table with edit,delete and details option for each.
@model IEnumerable<JsonEntity.Users> //JsonEntity is my Class Library Name and Users is my Class name
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<table id="tableUser" class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Address)
</th>
<th>
@Html.DisplayNameFor(model => model.Phone_Number)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr id="TableData">
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Address)
</td>
<td>
@Html.DisplayFor(modelItem => item.Phone_Number)
</td>
<td>
<input type="button" id="btnEditUser" value="Edit" onclick="EditUser(@item.Id)" class="btn btn-default" /> | //EditUser is a javascript function and passing Selected users id to the function
<input type="button" id="btnDetailUser" value="Details" onclick="Details(@item.Id)" class="btn btn-default" /> | //Details is a javascript function
<input type="button" id="btnDeleteUser" value="Delete" onclick="Delete(@item.Id)" class="btn btn-default" /> //Delete is a javascript function
</td>
</tr>
}
</table>
Here your users list would be empty.
To create a user update your view as following.
@model IEnumerable<JsonEntity.Users>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s=" crossorigin="anonymous"></script>
<p>
<input type="button" id="btnCreateUser" value="Create User" class="btn btn-default" />
</p>
<table id="tableUser" class="table"></table>
<div id="CreateUser" class="form-horizontal">
<h4>Users</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
<label class = "control-label col-md-2">Name</label>
<div class="col-md-10">
<input class="form-control" type="text" name="Name" id="Name"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2">Address</label>
<div class="col-md-10">
<input class="form-control" type="text" name="Address" id="Address" />
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2">Phone Number</label>
<div class="col-md-10">
<input class="form-control" type="text" name="PhoneNumber" id="PhoneNumber" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="button" id="btnCreate"value="Create" class="btn btn-default" />
<input type="button" id="btnJson" value="Create Json" class="btn btn-default" />
</div>
</div>
</div>
Now adding a Javascript to create a User.
<script type="text/javascript">
$("#btnCreate").click(function () {
var objUser = {}; objUser.Name = $("#Name").val(); objUser.Address = $("#Address").val();
objUser.Phone_Number = $("#PhoneNumber").val();
$.post("/Users/CreateUser", { objUser: objUser }, function (data) {
if (data != null) {
alert("User Created");
location.reload(); }
else {
alert("Error");
}
});
})
</script>
Add a JsonResult method in your Controller.
[HttpPost]
public JsonResult CreateUser(Users objUser) {
try
{
using (JsonContext context = new JsonContext())
{
context.ObjUser.Add(objUser);
context.SaveChanges();
return Json(objUser, JsonRequestBehavior.AllowGet); }
}
catch (Exception ex)
{
return null;
}
}
Now for editing the Users update your Index view as below.
<div id="CreateUser" class="form-horizontal"></div>
<div class="form-horizontal" id="EditUser">
<h4>Users</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
<input type="hidden" id="IdEdit" name="IdEdit"/>
<label class="control-label col-md-2">Name</label>
<div class="col-md-10">
<input class="form-control" type="text" name="NameEdit" id="NameEdit" />
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2">Address</label>
<div class="col-md-10">
<input class="form-control" type="text" name="AddressEdit" id="AddressEdit" />
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2">Phone Number</label>
<div class="col-md-10">
<input class="form-control" type="text" name="PhoneNumberEdit" id="PhoneNumberEdit" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="button" value="Save" id="btnSaveEdit" class="btn btn-default" />
</div>
</div>
</div>
Add another javascript function in your view.
function EditUser(Id)
{
$.get("/Users/EditUserJ",{Id:Id},function(data){ //fetching data of the selected user from controller
if(data!=null)
{
$("#tableUser").hide();
$("#CreateUser").hide();
$("#EditUser").show();
//data contains the details of the user
// now showing those details in the textbox
$("#NameEdit").val(data.Name);
$("#AddressEdit").val(data.Address);
$("#PhoneNumberEdit").val(data.Phone_Number);
$("#IdEdit").val(data.Id);
}
});
}
$("#btnSaveEdit").click(function(){
var objUser={}; //same action as per creating the user
objUser.Id= $("#IdEdit").val();
objUser.Name = $("#NameEdit").val();
objUser.Address = $("#AddressEdit").val();
objUser.Phone_Number = $("#PhoneNumberEdit").val();
$.post("/Users/EditUserJ", { objUser: objUser }, function (data)
{
if (data != null) {
location.reload();
alert("User Edited");
}
else {
alert("Error");
}
});
})
Now add another method to controller as below.
[HttpGet]
public JsonResult EditUserJ(int Id) {
try
{
using (JsonContext context = new JsonContext())
{
var User = context.ObjUser.Find(Id);
if (User != null)
{
return Json(User, JsonRequestBehavior.AllowGet);
}
return Json(null, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
return null;
}
}
[HttpPost]
public JsonResult EditUserJ(Users objUser) {
try
{
using (JsonContext context = new JsonContext())
{
context.ObjUser.AddOrUpdate(objUser);
context.SaveChanges();
return Json(objUser, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
return null;
}
}
Now for Showing details of the selected user update the View page.
<div class="form-horizontal" id="EditUser"></div>
<div id="UserDetails">
<h4>User</h4>
<hr />
<dl class="dl-horizontal">
<dt>
<input type="hidden" id="IdDetails" name="IdDetails" />
<label id="">Name</label>
</dt>
<dd>
<label id="NameDetails"></label>
</dd>
<dt>
<label id="">Address</label>
</dt>
<dd>
<label id="AddressDetails"></label>
</dd>
<dt>
<label id="">Phone Number</label>
</dt>
<dd>
<label id="PhoneNumberDetails"></label>
</dd>
</dl>
</div>
Now add the Javascript
function Details(Id)
{
$.get("/Users/GetDetails",{Id:Id},function(data){
if(data!=null)
{
$("#tableUser").hide();
$("#CreateUser").hide();
$("#EditUser").hide();
$("#UserDetails").hide();
$("#btnEditDetail").show();
$("#NameDetails").text(data.Name);
$("#AddressDetails").text(data.Address);
$("#PhoneNumberDetails").text(data.Phone_Number);
$("#IdDetails").text(data.Id);
}
});
}
$("#btnEditDetail").click(function(){
var Id =document.getElementById("IdDetails").textContent;
EditUser(Id);
})
Add the methods to the controller
public JsonResult GetDetails(int Id) {
try
{
using (JsonContext context = new JsonContext())
{
var User = context.ObjUser.Find(Id);
if (User != null)
{
return Json(User, JsonRequestBehavior.AllowGet);
}
return null;
}
}
catch (Exception ex)
{
return null;
}
}
And now for Deleting Data(Users).Add Javascript Function.
function Delete(Id)
{
$.post("/Users/DeleteUserJ", { Id: Id }, function (data) { if (data != null) {
location.reload();
alert("User Deleted");
}
else {
alert("Error");
}
});
}
Now add a method for deleting
[HttpPost]
public JsonResult DeleteUserJ(int Id)
{
try
{
using (JsonContext context = new JsonContext())
{
var User = context.ObjUser.Find(Id); if (User != null)
{
context.ObjUser.Remove(User); context.SaveChanges();
return Json(User, JsonRequestBehavior.AllowGet);
}
return Json(null, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
return null;
}
}
Creating a Json File. Json file helps us to get data without interacting the Server.
Update your Index view page.
@model IEnumerable<JsonEntity.Users>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s=" crossorigin="anonymous"></script>
<p>
<input type="button" id="btnCreateUser" value="Create User" class="btn btn-default" />
<input type="button" id="btnCreateJson" value="Create Json" class="btn btn-default"/>
<input type="button" id="get-data" value="Get Data From json" class="btn btn-default" />
</p>
Now add another javascript
$("#btnCreateJson").click(function () {
$.post("/Users/CreateJson", function (response) {
if (response != null) {
alert("Json Created");
location.reload();
}
else {
alert("Error");
}
});
})
Add a method to controller.
[HttpPost]
public ActionResult CreateJson()
{
try
{
using (JsonContext context = new JsonContext())
{
var UsersList = context.ObjUser.ToList(); var jsondata = new JavaScriptSerializer().Serialize(UsersList);
string path = Server.MapPath("~/Json/"); System.IO.File.WriteAllText(path + "User.json", jsondata); return Json(1);
}
}
catch(Exception ez)
{
return Json(0);
}
}
Now getting the list of user from Json File
Add another javascript
$('#get-data').click(function () {
var url="/Json/User.json";
$.getJSON(url, function (data) { console.log(data);
$('#show-data').empty();
if (data.length) {
var content="<table class='table'>";
for(var i=0;i<data.length;i++)
{
content+="<tr><td>"+data[i].Name+"</td><td>"+data[i].Address+"</td><td>"+data[i].Phone_Number+"</td></tr>";
}
content+="</table>";
$('#show-data').append(content); }
});
showData.text('Loading the JSON file.');
})
Now searching data from Json File
@model IEnumerable<JsonEntity.Users>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s=" crossorigin="anonymous"></script>
<p>
<input type="button" id="btnCreateUser" value="Create User" class="btn btn-default" />
<input type="button" id="btnCreateJson" value="Create Json" class="btn btn-default"/>
<input type="text" id="Search" placeholder="Enter data"/>
<input type="button" id="get-data" value="Get Data From json" class="btn btn-default" />
</p>
Javascript :-
$("#Search").keyup(function (e) {
clearTimeout($.data(this, 'timer'));
if (e.keyCode == 13)
DataFromJson(true);
else
$(this).data('timer', setTimeout(DataFromJson, 50)); })
function DataFromJson(force)
{
var event = $("#Search").val(); var url = "/Json/User.json";
$.getJSON(url, function (response) {
if (response.length) {
$("#tableUser").empty();
var content = "<tr><th>Name</th><th>Address</th><th>Phone Number</th></tr>";
for (var i = 0; i < response.length; i++) {
if ((response[i].Name).indexOf(event) != -1 || (response[i].Address).indexOf(event) != -1 || (response[i].Phone_Number).indexOf(event) != -1) {
content += "<tr id='TableData'><td>" + response[i].Name + "</td><td>" + response[i].Address + "</td><td>" + response[i].Phone_Number + "</td><td><input type='button' id='btnEditUser' value='Edit' class='btn btn-default' onclick='EditUser(" + response[i].Id + ")'/> | <input type='button' id='btnDetailUser' class='btn btn-default' value='Details' onclick='Details(" + response[i].Id + ")'/> | <input type='button' id='btnDeleteUser' value='Delete' onclick='Delete(" + response[i].Id + ")' class='btn btn-default'/></td></tr>";
}
}
$("#tableUser").append(content); }
});
}