Sunday 24 May 2015

UpdateModal and TryUpdateModal in Asp.Net MVC

Here we will learn Update Modal and try update modal in asp.net MVC. Before coming to this tutorial go through Insert data into database .
In previous tutorial we learned how to insert data into database in MVC, so for that we used “FormCollection parameter” , we also did this with passing parameter for all the modal properties in function.
Except these two things we can pass “Student” class object also as a parameter in Create controller action method for Post request, See following code.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using BusinessLayer;

namespace MvcApplication2.Controllers
{
    public class StudentController : Controller
    {
        public ActionResult Index()
        {
            BusinessLogic BL = new BusinessLogic();

            List<Student> student = BL.student.ToList();
            return View(student);
        }

        [HttpGet]
        public ActionResult Create()
        {
            return View();
        }    

        [HttpPost]
        public ActionResult Create(Student student)
        {
            //Student student = new Student();           
            //student.StudentName = formCollection["StudentName"];
            //student.Gender = formCollection["Gender"];
            //student.StudentClass = formCollection["StudentClass"];           

            BusinessLogic BL =new BusinessLogic();

            BL.InsertStudentDetail(student);
            return RedirectToAction("Index");
        }

    }
}



Now if you will run your application and you will click on New Create and you will fill value in screen then it will update as it was working with “Formcollection method”.
Here we can use “ModelState” parameter for checking Validation in modal class , if we use this ModalState then Create  controller post method will we like following
[HttpPost]
        public ActionResult Create(Student student)
        {

            if (ModelState.IsValid)
            {
                BusinessLogic BL = new BusinessLogic();

                BL.InsertStudentDetail(student);
                return RedirectToAction("Index");
            }
            return View();
        }


This ModalState is used with “IsValid” Boolean property for checking either all the modal properties is valid or not.
Use Update Modal Function
Above Create Controller action method of Post request can be written with the “UpdateModal
Then the function will be
[HttpPost]
        public ActionResult Create()
        {           
            if (ModelState.IsValid)
            {
                Student student = new Student();

                UpdateModel<Student>(student);

                BusinessLogic BL = new BusinessLogic();

                BL.InsertStudentDetail(student);
                return RedirectToAction("Index");
            }
            return View();
        }
At this time if we run our application then it will give a compilation error that
Error 1       Type 'MvcApplication2.Controllers.StudentController' already defines a member called 'Create' with the same parameter types    
So Get rid of this problem we have to change the name for this create method , So we give this method name as Create_Post method. Now if we run this application and click on Create button then it will not render to the Create view because we changed the Action method , And as we no action method name and view name should be same.
So Get rid of this problem also we use “ActionName” Attribute .So code will be
[HttpPost]
        [ActionName("Create")]
        public ActionResult Create_Post()
        {           
            if (ModelState.IsValid)
            {
                Student student = new Student();
                UpdateModel<Student>(student);
                BusinessLogic BL = new BusinessLogic();

                BL.InsertStudentDetail(student);
                return RedirectToAction("Index");
            }
            return View();
        }


Run your application and insert new student record into the database.
TryUpdateModal function
First make the changes in Create_post()method like following code
[HttpPost]
        [ActionName("Create")]
        public ActionResult Create_Post()
        {           
                Student student = new Student();
                UpdateModel<Student>(student);
                BusinessLogic BL = new BusinessLogic();

            if (ModelState.IsValid)
            {

                BL.InsertStudentDetail(student);
                return RedirectToAction("Index");
            }
            return View();
        }


Suppose while inserting data into database if we not fill any value for name, gender, school  name then we click on Create button then it will error that “ its expected name, gender, school name.
So make these properties as option change database stored procedure

Alter procedure insertStdDetail     
@StudentName nvarchar(50) = null,    

@Gender 
nvarchar(10) = null,     
@SchoolName 
nvarchar (50) = null
as    
Begin    
 Insert into StudentInfo (Name, Gender, SchoolName)    
 Values (@StudentName, @Gender, @SchoolName)    

End

Now if we insert data into database it will insert NULL data into database, So if we want data into database we have to make required properties , For that we can use “required attribute” which present in “System.ComponentModel.DataAnnotations namespace”.
So for this in BusinessLayer project we have add “EntityFramework” assembly for getting Following code.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;

namespace BusinessLayer
{
    public class Student
    {
        public int StudentID { get; set; }

        [Required]

        public string StudentName { 
get; set; }
        public string Gender { 
get; set; }
        [Required]

        public string SchoolName { 
get; set; }

    }
}

Now run this application and without entry data click on Create button we will get error like
The model of type 'BusinessLayer.Employee' could not be updated.”. This error come from the updateModal trigger.
Now let’s change this update modal in “TryUpdateModal” in Create_Post Action method of StudentController.
[HttpPost]
[ActionName("Create")]

public ActionResult Create_Post()
{
    BusinessLogic BL =     
new BusinessLogic ();
Student student = new Student();

    TryUpdateModel(student);
    if (ModelState.IsValid)

    {
   UpdateModel<Student>(student);             

   BL.InsertStudentDetail(student);

     
        return RedirectToAction("Index");

    }
    else

    {
        return View();

    }
}

If Now you will run your application without entry data it will not give exception.

So the difference b/w “updatemodal” and “tryUpdateModal” is that update modal doesn’t handle null and give error while TryUpdateModal handle this error.

Saturday 23 May 2015

Insert Data into databas using Asp.Net MVC

Go through previous tutorial use business library as modal before preceding this tutorial. In Last tutorial we generated a student data modal


Step(1) : -In this Modal if i click on “Create New” link it goes to “http://localhost:12542/Student/Create” url , Means it expect Create method in Student controller but it didn’t get that so it gives exception , So get rid of this problem let’s write a “Create” method
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using BusinessLayer;

namespace MvcApplication2.Controllers
{
    public class StudentController : Controller
    {
        public ActionResult Index()
        {
            BusinessLogic BL = new BusinessLogic();

            List<Student> student = BL.student.ToList();
            return View(student);
        }

        [HttpGet]
        public ActionResult Create()
        {
            return View();
        }

    }
}



Here if we see that this “Create” method is designed with “[HttpGet]” means this method responds only for the Get request or we can say that when user will come to this http://localhost:12542/Student/Create” url. It will not work for Post method.
Step(2) : - Let’s create a view for this “Create Method by right click on this method and add a view



Here modal class as “Student” and Scaffold template as Create ,this will automatically create a view. In generated view code make some changes for changing “Gender” textbox to as Dropdown box , So View code will like following code
At this time if you will run your application and click on “Create New” Link it will give error for @Scripts.Render("~/bundles/jqueryval")

So before run this application remove this line from your view code (it will at last) ,We will discuss on this in later tutorial.
So the view code will be
@model BusinessLayer.Student
@{
    ViewBag.Title = "Create";
}
<h2>
    Create</h2>
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Student</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.StudentName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.StudentName)
            @Html.ValidationMessageFor(model => model.StudentName)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Gender)
        </div>
        <div class="editor-field">
            @Html.DropDownList("Gender", new List<SelectListItem>
{
new SelectListItem { Text = "Male", Value="Male" },
new SelectListItem { Text = "Female", Value="Female" }
}, "Select Gender")
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.StudentClass)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.StudentClass)
            @Html.ValidationMessageFor(model => model.StudentClass)
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>




Step(3): - when you will run your application and click on “create new”  then o/p will be



Step(4) : Here in above o/p or screen if we  click on Create button ,then it gives error that resource not found  because we didn’t create method for this. Means we have create [HttpPost] method.
Let’s  create a stored procedure for insertion data into database table
Create procedure insertStdDetail 
@StudentName nvarchar(50), 
@Gender nvarchar (10), 
@SchoolName nvarchar (50) 
as 
Begin 
 Insert into dbo.StudentInfo (StudentName, Gender, SchoolName ) 
 Values (@StudentName, @Gender, @SchoolName) 
End

Step(5):- Go to BusinessLayer library  project and in “BusinessLogic.cs” Class write a method for inserting value in database. For that take the following code
public void InsertStudentDetail(Student student)
        {
            string connectionString =
                    ConfigurationManager.ConnectionStrings["Connect"].ConnectionString;

            using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand cmd = new SqlCommand("insertStdDetail", con);
                cmd.CommandType = CommandType.StoredProcedure;

                SqlParameter paramName = new SqlParameter();
                paramName.ParameterName = "@StudentName";
                paramName.Value = student.StudentName;
                cmd.Parameters.Add(paramName);

                SqlParameter paramGender = new SqlParameter();
                paramGender.ParameterName = "@Gender";
                paramGender.Value = student.Gender;
                cmd.Parameters.Add(paramGender);

                SqlParameter paramCity = new SqlParameter();
                paramCity.ParameterName = "@SchoolName";
                paramCity.Value = student.StudentClass;
                cmd.Parameters.Add(paramCity);               

                con.Open();
                cmd.ExecuteNonQuery();
            }
        }


Step(6): -Write a post method in Student controller class of Create method , Take the following code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using BusinessLayer;

namespace MvcApplication2.Controllers
{
    public class StudentController : Controller
    {
        public ActionResult Index()
        {
            BusinessLogic BL = new BusinessLogic();

            List<Student> student = BL.student.ToList();
            return View(student);
        }

        [HttpGet]
        public ActionResult Create()
        {
            return View();
        }

   //Post Method for inserting data into database

        [HttpPost]
        public ActionResult Create(FormCollection formCollection)
        {
            Student student = new Student();           
            student.StudentName = formCollection["StudentName"];
            student.Gender = formCollection["Gender"];
            student.StudentClass = formCollection["StudentClass"];
           

            BusinessLogic BL =new BusinessLogic();

            BL.InsertStudentDetail(student);
            return RedirectToAction("Index");
        }

    }
}



We can create this method using parameters  

[HttpPost]
public ActionResult Create(string name, string gender, string studentClass)
{
    Student student = new Student();

   student.StudentName = name;
   student.Gender = gender;
   student.StudentClass = studentClass;
 

    BusinessLogic BL =new BusinessLogic();


            BL.InsertStudentDetail(student);

            return RedirectToAction("Index");

}


Basically we use “FormcCllection for getting Key and values.
Step(7):- Click on Create new link you will see screen and fill value and click on “Create” button.


After click on button it redirect to main page with updated student detail. 


C# program Selection Sorting

Selection sort is a straightforward sorting algorithm. This algorithm search for the smallest number in the elements array and then swap i...