Clean URL Issue
Hi,
I have an issue regarding urls.
I have two MVC widgets on two different pages.
Widget1 : List of Movies I am fetching them from dynamic modules.
e.g.
Movies
abc
xyz
mno
Clicking on each movie I want to redirect it on details page.
but don't want to pass parameter in querystring
/moviedetails?moviename = abc
It should be /moviedetails/abc
Based on the abc or id, I want to fetch details and show on MovieDetails page.
I don't have separate moviedetail page for each movie.
What I tried is
View
@Html.ActionLink("abc", "Details", new Id = 1 );
Controller of Widget1
public ActionResult Details(int Id)
Hi Mateen,
Thanks for contacting us. Can you please confirm whether or not you used Thunder to create your MVC widgets?
In the meantime you might be interested in taking a look at the following webinar: Developing for Sitefinity with ASP.NET MVC.
Regards,
David C
Telerik
Hi,
I have a index page where I show the list for dynamic content. On clicking the button it should go to the different page where details are shown. the urls should be of type ~/index/content-type and ~/details/content-type/content-title. how these clean urls can be achieved. I am using mvc widgets for both list as well as details, and want to pass parameters accordingly.
Thanks in advance.
Regards,
Chaitanya
Hi David,
Thankx for the reply and sharing the webinar but it is for pure MVC template.
I am using Sitefinity version 6.1, used thunder to create MVC widgets and my template is Hybrid template. In setting I did EnableBackwardCompatabilityForPagesUrls is true.
My scenario is:
2 MVC widgets on two different pages.
Page Name: E.g. Movies and MovieDetails
Movie page has list of dynamic module fetching through MVC widgets.
Onclick of each movie, it should go to MovieDetails page, but url should not be like www.abc.com/movies/moviedetails?parameter=moviename
e.g.
www.abc.com/movies/moviedetails?parameter=thor
Rather it should be
www.abc.com/movies/thor
I need to load moviedetails page by passing parameter and need to call controller of MVC widget2 which is placed on that page . But dont to show page name in URL.
Thanks in advance.
Kindly reply to this.
Regards,
Mateen
Hi David,
I will be thankful if you could put your inputs on this.
Regards,
Mateen
Hi Mateen,
Sorry for the delay in getting back to you. I am currently looking into the answer for you and will reply back shortly.
Regards,
David C
Telerik
Hi Mateen,
I've attached my version of what you are doing. I set mine up a bit differently, but achieved the same result. The only difference is instead of having 2 mvc widgets I just have one wdget with 2 views. Basically I route my controller to the details view and pass it the movie name.
Take a look.
Regards,
David C
Telerik
Hi David,
Thanks a lot for the response.
I appreciate that you shared demo code, but I am looking something bit different.
This works perfect on same page a widget returning two different views.
But what if I have to put my Details view(MVC widget) on another page.
I need to achieve exactly same but on another page.
After going on Detail method I need to load another page e.g. page name MovieDetails
Url should be: www.abc.com/Movies/Braveheart but page will be MovieDetails.
View
<div>@Html.ActionLink(@movie.Name, "Details", "Movies",new id = @movie.Name,null) - @movie.Year</div>
MoviesController
public ActionResult Details(string id)
var movieDetails = listfOfMovies.Where(m => m.Name == id);
return View("Details", movieDetails);
I hope you got my point.
Regards,
Mateen
Hi Mateen,
Sorry for the delay getting back to you. Was digging around looking for some info before I responded. So this has come up before and the responses were basically what I suggested, which is use the 2 views, 1 controller scenario. I realize this doesn't work for you, but here's what I found and what I might suggest...
So you your original question... The easy part is that you just construct the link with the variable you mentioned below like you would any standard html link in your view. The issue is that your moviedetails view is going to see the /moviename as a routing parameter, unless you specify it in an ActionLink attribute. Now you could probably fake this out by creating a client side script that store's the movie name in a cookie or session variable and then read it in your Details controller. Here's some info about how you might do this:
Passing Data in an ASP.NET MVC Application
If routing is your main obstacle, then another option might be to build a "classic mode" AP.Net MVC widget. This will allow you to register your specific route. Here's some more info:
Classic MVC mode
As an alternative have you considered you using Web API in conjunction with your MVC files? This is what I was initially going to recommend to you and I also saw it suggested to others trying to do the same scenario. Here's some info about it:
Using ASP.NET Web API for Sitefinity REST Services
Learn About ASP.NET Web API
Regards,
David C
Telerik