IT_INFOhUb
IT_INFOhUb

Reputation: 516

How to prevent a page gets refreshed?

I have DropDownList and a submit button on my page. DropDownListhas list of data from the database, and while selecting value from the dropdown and then clicking on submit button, I am getting number of records of selected dropdown list value in partial view of the main view page. My code is giving proper output. I have bind View to controller through model. Using html.hiddenfor. But whenever I click on submit button as usual my whole page gets refreshed. But I need to refresh only partial view rather than whole page.

This is my code which is working properly. But by this code my whole page is getting refreshed. And I want to prevent it. :

view:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<ApricaCRMEvent.Models.CRM.DatabaseEntities.CRM_Doctor_Request>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    MDLNoDDLIndex
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <script type="text/javascript">
        function TestFun() {
            var mdlno = $("#ddlMDLNo").val();
            var txtmdlno = document.getElementById("Request_For_Id");
            txtmdlno.value = mdlno;
        }
</script>

<div>
<h2>Search by MDLNo</h2>
     <% using (Html.BeginForm())
        { %>

        Select MDLno 

        <%= Html.DropDownList("ddlMDLNo", ViewData["MDLno"] as SelectList, "--Select One--", new { onchange = "TestFun()" })%> 
        <%: Html.HiddenFor(model => model.Request_For_Id) %> 

         <input type="submit" value="search" name="SearchMDLNo" id="btnclick" />    
    <% } %>
</div>
<div id="showtable">   //partial view
<% if (ViewBag.load == true)
   { %>
    <%Html.RenderAction("MDLNoDataList"); %>
<% } %>
</div>

</asp:Content>

Controller:

// Search by mdl no
        public ActionResult MDLNoDDLIndex()
        {
            ViewData["MDLno"] = new SelectList(CRMSearchReportDL.getAllMDLno(), "Request_For_Id", "Request_For_Id");
            ViewBag.load = false;
            return View();
        }

        [HttpPost]
        public ActionResult MDLNoDDLIndex(CRM_Doctor_Request model)
        {
            ViewData["MDLno"] = new SelectList(CRMSearchReportDL.getAllMDLno(), "Request_For_Id", "Request_For_Id",model.Request_For_Id);
            ViewBag.load = true;
            return View();
        }


        public ActionResult MDLNoDataList()
        {
            List<CRM_Doctor_Request> drlist = new List<CRM_Doctor_Request>();
            return PartialView(drlist);
        }
        [HttpPost]
        public ActionResult MDLNoDataList(CRM_Doctor_Request model)
        {
            return PartialView(CRMSearchReportDL.getMDLNoWiseDetails(model.Request_For_Id));
        }

Upvotes: 2

Views: 3018

Answers (1)

M.Ob
M.Ob

Reputation: 1847

You can use jQuery to do this for you. Capture the form submit in jQuery and instead of performing a full form post through the browser, submit your form data to a controller action using jQuery's .ajax() method.

Something like this:

$.ajax({
    url: urlToControllerAction,
    data: {
        ddlMDLNo: ddlMDLNo,
        Request_For_Id: Request_For_Id
    },
    type: 'POST',
    success: function (results) {
         var partialData = $(results);
         $('#showtable').html(partialData);
    },
    error: function (xhr, ajaxOptions, thrownError) {
        // do something
    }
});

Upvotes: 3

Related Questions