Search code examples
ajaxasp.net-mvcform-helpersajax.beginform

How to use Simple Ajax Beginform in Asp.net MVC 4?


I am new in Asp.net MVC and i researched about Ajax.BeginForm but when i apply codes it did not work. Can you share very simple example with Ajax.Beginform with View, Controller, Model? Thanks.


Solution

  • Simple example: Form with textbox and Search button.

    If you write "name" into the textbox and submit form, it will brings you patients with "name" in table.

    View:

    @using (Ajax.BeginForm("GetPatients", "Patient", new AjaxOptions {//GetPatients is name of method in PatientController
        InsertionMode = InsertionMode.Replace, //target element(#patientList) will be replaced
        UpdateTargetId = "patientList",
        LoadingElementId = "loader" // div with .gif loader - that is shown when data are loading   
    }))
    {
        string patient_Name = "";
        @Html.EditorFor(x=>patient_Name) //text box with name and id, that it will pass to controller
        <input  type="submit" value="Search" />
    }
    
    @* ... *@
    <div id="loader" class=" aletr" style="display:none">
        Loading...<img src="~/Images/ajax-loader.gif" />
    </div>
    @Html.Partial("_patientList") @* this is view with patient table. Same view you will return from controller *@
    

    _patientList.cshtml:

    @model IEnumerable<YourApp.Models.Patient>
    
    <table id="patientList" >
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Number)
        </th>       
    </tr>
    @foreach (var patient in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => patient.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => patient.Number)
        </td>
    </tr>
    }
    </table>
    

    Patient.cs

    public class Patient
    {
       public string Name { get; set; }
       public int Number{ get; set; }
    }
    

    PatientController.cs

    public PartialViewResult GetPatients(string patient_Name="")
    {
       var patients = yourDBcontext.Patients.Where(x=>x.Name.Contains(patient_Name))
       return PartialView("_patientList", patients);
    }
    

    And also as TSmith said in comments, don´t forget to install jQuery Unobtrusive Ajax library through NuGet.