ASP.NET MVC - Kommentarsfunktion med PRG Pattern

Har programmerat om kommentars-funktionen på bloggen och den följer nu designmönstret Post/Redirect/Get (PRG Pattern). Det innebär att när en kommentar postas så görs det till en specifik url som bara accepterar Http-verbet "Post". Sen skickas besökaren tillbaks till inläggets vanliga url med en ankarlänk till den nyligen postade kommentaren tillagd på slutet.

Innan denna förändring så postades kommentaren direkt till samma vy/url som även används till att visa inlägget.

Fördelar med PRG-mönstret

Fördelen med att följa PRG-mönstret är att kommentaren inte dubbelpostas ifall användaren klickar på tillbaka-knappen i sin webbläsare. Nuförtiden så varnar ju dock de flesta moderna webbläsare att en ompostning kommer ske, men det är ofta man inte tänker på att det inte går att backa och det är ett rätt störande meddelande som man slipper med PRG-mönstret.

Läs mer hos Stephen Walter som också beskriver samma mönster med ASP.NET MVC i artikeln "Call RedirectToAction after Submitting a Form".

Hur man gör för att redirecta till en länk med ankare på slutet hittade jag på en japansk blogg.

Hur det är implementerat här på bloggen

Tänkte visa lite exempelkod som är ungefär den kod som körs på bloggen just nu.

Först de routes som har med att visa inläggen och posta kommentarer:

routes.MapRoute(
    "BlogPostAddComment",
    archiveRoute + "/{year}/{month}/{day}/{slug}/add-comment", //arkiv/2008/05/29/radonförgiftning#ankar-länk
    new { controller = "Blog", action = "AddComment" }
    );

routes.MapRoute(
    "BlogPostWithAnchor",
    archiveRoute + "/{year}/{month}/{day}/{slug}#{anchor}", //arkiv/2008/05/29/radonförgiftning#ankar-länk
    new { controller = "Blog", action = "ArchiveBySlug" }
    );

routes.MapRoute(
    "BlogPost",
    archiveRoute + "/{year}/{month}/{day}/{slug}", //arkiv/2008/05/29/radonförgiftning
    new { controller = "Blog", action = "ArchiveBySlug" }
    );
	}

Sen det Action i Controllern som sätter in kommentarern i databasen och redirectar användaren till rätt vy igen. Det sker lite mer blanda annat har vi ett anti-spam-skydd och kommentarern mailas även till mig (nytt för idag så nu kommer jag vara mer alert på nya kommentarer).

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddComment(int year, int month, int day, string slug)
{

    var url = Request.Form["url"];
    int postid = Convert.ToInt32(Request.Form["postid"]);
    var name = Request.Form["name"];
    var body = Request.Form["body"];
    var email = Request.Form["mail"];

    int addedCommentId = blogService.AddComment(postid, name, body, email, url);

    return RedirectToRoute("BlogPostWithAnchor", new { action = "ArchiveBySlug", year = year, month = month, day = day, slug = slug, anchor = "comment-"+addedCommentId });

}

Comments

Intressant! Designmönster är något man borde bli bättre på att gå efter i sin utveckling. Tack för tipset!

Ja designmönster borde man verkligen kolla mer på. Det finns ju en del utvecklare där ute som tänkt till en del på hur en process kan utvecklas på bästa sätt. Ska nog skriva en post med tips till resurser.

It is one of the most impressive blog that I have ever read. It is really good to see such an amazing site online. I would say that there is no other site in the internet with so much of information.essay writing

Great post! I have found some new MVC ideas from your post. Very well written and interesting article. Thanks to provide useful information. For more about Web Desiging

Great post! I have found some new MVC ideas from your post.Thanks to provide useful information.thanks http://www.onlinepromotionuae.ae

amazing sharing this post... thank you........ www.andamandiscover.com"> www.andamandiscover.comlink text

thanks for sharing this information and such a really knowledgeable post.. http://onlinepromotionhouse.com"> http://onlinepromotionhouse.com

Superb post. Many thanks for discussing valuable content material. Best Technical Support for Microsoft user. If you face any types of problems you can touch with : Microsoft Support Number UK Microsoft Help Number UK Microsoft Contact Number UK

The system works slowly or system just unable to remove to previous antivirus after its installation is the issue that you can resolve by dialing 0800-098-8371. The expert technicians are ready to sort out the issues. More Help you can touch with McAfee Contact Number UK McAfee Phone Number UK McAfee Customer Care Number UK

thanks for this awesome web page, i like it.Norton help phone number UK

Norton Support

Norton Support Number

Very Very nice post. its a very useful and outstanding article. Thanks for that.

yes man, its a very useful article. i tried it on my sites. its work. thank you so much

Nice post thanks for sharing this valuable information,i like it.

Very Very nice post. its a very useful and outstanding article. Thanks for that.

Awesome posting and topic is very nice . Good posting.

Hi, Thanks for the sharing nice posting with us. i am really impressed. We are offering a new and latest Hotmail Support

Epson Printer Customer Service Phone Number

Information - Make use of now our Chaturbate Token Hack as well as you have the ability to Hack up to 500 tokens. Unfortunately, after 1000 user limit is reached we will certainly have to take anti spamming steps for our Chaturbate Token Adder No Study. http://chaturbatetokengenerator.net/"> http://chaturbatetokengenerator.net/

Please fill out all the fields.

*
*