Alsan
Alsan

Reputation: 325

MVC3 Calling controller method from Javascript

In MVC3. I have a button class"open-deleteRowDialog" when i click on it goes to this javascript:

 $(document).on("click", ".open-DeleteRowDialog", function () { 
         var pwd= '@Url.("GeneratePsw","Admin")';
         $(".modal-body #pwd").val(pwd);
        $('#1').modal('show');

})

what i want is to call a method (in controller), who has to return a string, that´s what i want to save in "var pwd" to show in a model (view)

the method (in controller) is:

public string GeneratePsw()
        {


            HomeBridgeEntities ddbb = new HomeBridgeEntities();
            SqlConnection Cn = new SqlConnection(((System.Data.EntityClient.EntityConnection)ddbb.Connection).StoreConnection.ConnectionString);
            SupPassGenerator sup = new SupPassGenerator(Cn);

            //psw conteins a password from CreateRandomPassword

            string psw = sup.CreateRandomPassword(9);


            return psw;


        }

thank you!

Upvotes: 3

Views: 6208

Answers (2)

Shyju
Shyju

Reputation: 218932

Make an ajax call to your controller action method. You may use $.get method like below.

$(function(){
   $(document).on("click", ".open-DeleteRowDialog", function () { 
      var pwd="";
       $.get("@Url.Action("Yourcontroller","GeneratePsw")",function(data){
           pwd=data;
           //now do whatever you want with pwd variable;
       });    
    })
 });

$.get is a short form of $.ajax method with type HTTP GET.

If you have trouble like cached data in the response, you may add a unique timestamp in your get call so that you won't get the cached result. You may use $.now method.

 $.get("@Url.Action("Yourcontroller","GeneratePsw")?"+$.now(),function(data){
    // to do : do something with result
 });

Another way is to set the cache property value to false in ajaxSetup method. But this will be applicable to all ajax calls.

Upvotes: 6

David L
David L

Reputation: 33873

Use jQuery ajax and call the controller method directly as a url

$(document).on("click", ".open-DeleteRowDialog", function () { 
    var pwd="";
    $.get('Yourcontroller/GeneratePsw', function(data){
        pwd=data;
        //now do whatever you want with pwd variable;
    });    
})

Upvotes: 2

Related Questions