user2945722
user2945722

Reputation: 1313

Recommended way to redirect to same view and perform server side code from a client side event in MVC

I am having a hard time deciding on an appropriate way to Perform some server side functionality and then redirecting to the same View in my ASP.Net MVC project.

I am trying to call an Action after the selected index changed client side event of my combobox.

One way I can think of is to change the window.location to the url of my Action and pass the data i need via the query string like this

function SelectedIndexChanged(s,e)
{
  window.location.href = "/MyController/MyAction?" + s.GetValue();
}

I also see lots of people saying you should use jquery ajax for this

function SelectedIndexChanged(s,e)
{
  $.ajax({
  url: 'MyController/MyAction',
  data: { value: s.GetValue() },
  success: function(){
    alert('Added');      
  }
});

}

My Action looks something like this where i set some cookie values using the value and Set View bags values depending on the selected index.

    public ActionResult SelectedIndexChanged(string value)
    {
        //Do some processing 
        //Set cookie values
         SetViewBags(value);
        return Redirect(Request.UrlReferrer.ToString());
    }

Is there a better approach to accomplish my task, I am leaning more towards changing the location.href as it is simpler, but i'm not sure if this is good practice?

EDIT

To Clarify this Combobox is a Devexpress MVC extension so I will have to handle the "SelectedIndexChanged" client side event.

This Combobox is also on my layout page so it appears on every view in my project. So when it is changed i will need to to call the same Action no matter what page it is on

Upvotes: 0

Views: 617

Answers (2)

Charl
Charl

Reputation: 113

You could always use an Html.Action

function SelectedIndexChanged(s,e)
{
    @Html.Action("ActionName", "ControllerName", {optional route values})
}

Upvotes: 0

user1477388
user1477388

Reputation: 21430

As you've indicated that your form is in your layout (not a view), I recommend you look at using a view partial. Fortunately, MVC has already provided an example with their view partial (can't remember the name) that has the login and logout buttons. If a user clicks logout, some javascript is fired and the form is submitted. This will redirect the user; however, you could also send the original address (referrer) as a parameter to your server method and then redirect to that page afterward.

Upvotes: 1

Related Questions