eWorld.UI - Matt Hawley

Ramblings of Matt

ASP.NET MVC - Using Post, Redirect, Get Pattern

May 8, 2008 23:51 by matthaw

Update: I've updated the sample to MVC Preview 3 bits. While this post is a great "overview" post, you should definately check out the latest sample as it's more streamlined.

imageThe ASP.NET MVC pattern tends to lead itself into a more simplified and "true" HTTP experience by re-introducing  patterns that have been lost, or at least, not followed in many years. One such pattern is the Post, Redirect, Get (PRG) pattern in which it is "to help avoid duplicate form submissions and allow web applications to behave more intuitively with browser bookmarks and the reload button" (Wikipedia).

 

A normal ASP.NET Web Form Lifecycle has the following pattern

  1. HTTP GET of "Create.aspx"
  2. HTTP POST of "Create.aspx"
  3. Validation Fails, "Create.aspx" is Re-Rendered
  4. HTTP POST of "Create.aspx"
  5. Item is created, "Create.aspx" is Re-Rendered with confirmation message

The major problems with this Postback pattern, is that hitting the Refresh button of your browser in steps 3 or 5 will re-post your submitted data. Step 5 is more of a problem as it could possibly re-submit that created information. Granted, there are steps that you can take to approach this problem, but this is how default ASP.NET Web Forms are treated.

Taking this same approach within ASP.NET MVC, can be achieved in the same manner by rendering a your "Create" view from your POST action. For example:

  1. HTTP GET of "/products/create", "Create" view is rendered
  2. HTTP POST to "/products/submit"
  3. Validation Fails, "Create" view is rendered
  4. HTTP POST to "/products/submit"
  5. Item is created, "Confirm" view is rendered

As you'll notice, the same problems we had with ASP.NET Web Forms exists with ASP.NET MVC. The really nice option, is that ASP.NET MVC gives you a lot more "freedom" of how the workflow is processed. If we strictly follow the PRG pattern within ASP.NET MVC, it would look something like

  1. HTTP GET of "/products/create", "Create" view is rendered
  2. HTTP POST to "/products/submit"
  3. Validation Fails, redirect to "/products/create", "Create" view is rendered
  4. HTTP POST to "/products/submit"
  5. Item is created, redirect to "/products/confirm", "Confirm" view is rendered

As you'll notice, where we previously could have had issues in step 3 or 5 before, we no longer have issues. If a user presses the Refresh button in either of those steps, they'll not get the lovely "Would you like to resubmit the form data" confirmation as featured below - instead, the page just reloads.

image

To implement this, you'll need 1 controller, 3 action methods, and 2 views. Follow the steps below to achieve this pattern:

   1:  using System.Web.Mvc;
   2:   
   3:  public class ProductsController : Controller
   4:  {
   5:     public ActionResult Create() { ... }
   6:     public ActionResult Submit() { ... }
   7:     public ActionResult Confirm() { ... }
   8:  }

When you implement your Create action, you have to keep in mind that validation may fail and you may need to re-display the form. TempData is best suited for this scenario, and is implemented as such.

 

   1:  public ActionResult Create()
   2:  {
   3:     if (TempData["ErrorMessage"] != null)
   4:     {
   5:        ViewData["ErrorMessage"] = TempData["ErrorMessage"];
   6:        ViewData["Name"] = TempData["Name"];
   7:        ViewData["Price"] = TempData["Price"];
   8:        ViewData["Quantity"] = TempData["Quantity"];
   9:     }
  10:     return RenderView();
  11:  }

Next you'll implement your Submit action. This will perform some validation of the user input data, and if successful will save the info and redirect to the Confirm action. If it is not successful, we'll store the form data into the TempData and redirect to the action Create. This way we mimic maintaining the view's state even if it fails.

   1:  public ActionResult Submit()
   2:  {
   3:      string error = null;
   4:      string name = Request.Form["Name"];
   5:      if (string.IsNullOrEmpty(name))
   6:      {
   7:          error = "Name is empty. ";
   8:      }
   9:      decimal price;
  10:      if (!decimal.TryParse(Request.Form["Price"], out price))
  11:      {
  12:          error += "Price is invalid. ";
  13:      }
  14:      int quantity;
  15:      if (!int.TryParse(Request.Form["Quantity"], out quantity))
  16:      {
  17:          error += "Quantity is invalid.";
  18:      }
  19:   
  20:      if (!string.IsNullOrEmpty(error))
  21:      {
  22:          TempData["ErrorMessage"] = error;
  23:          TempData["Name"] = Request.Form["Name"];
  24:          TempData["Price"] = Request.Form["Price"];
  25:          TempData["Quantity"] = Request.Form["Quantity"];
  26:          return RedirectToAction("Create");
  27:      }
  28:      else
  29:      {
  30:          return RedirectToAction("Confirm");
  31:      }
  32:  }

Something very interesting to note in the above example, is that even though I've pulled all values out of the form into local variables, should either Price or Quantity fail in parsing and I set the TempData to the local variables...I would have lost the user input. So, it's always a smart idea to retrieve the data from the form directly into the TempData. Finally, the Confirm action needs to be implemented.

   1:  public ActionResult Confirm()
   2:  {
   3:      return RenderView();
   4:  }

Now, it's time to create our views:

~/Views/Products/Create.aspx

   1:  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Create.aspx.cs" Inherits="Views_Products_Create" %>
   2:  <html xmlns="http://www.w3.org/1999/xhtml">
   3:  <head runat="server">
   4:      <title>Create Product</title>
   5:  </head>
   6:  <body>
   7:      <% using (Html.Form<ProductsController>(c => c.Submit())) { %>
   8:      <% if (!string.IsNullOrEmpty((string) ViewData["ErrorMessage"])) { %>
   9:          <div style="color:Red;">
  10:              <%= ViewData["ErrorMessage"] %>
  11:          </div>
  12:      <% } %>
  13:      Name: <%= Html.TextBox("Name", ViewData["Name"]) %><br />
  14:      Price: <%= Html.TextBox("Price", ViewData["Price"]) %><br />
  15:      Quantity: <%= Html.TextBox("Quantity", ViewData["Quantity"]) %><br />
  16:      <%= Html.SubmitButton("submitButton", "Save") %>
  17:      <% } %>
  18:  </body>
  19:  </html>

~/Views/Products/Confirm.aspx

   1:  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Confirm.aspx.cs" Inherits="Views_Products_Confirm" %>
   2:  <html xmlns="http://www.w3.org/1999/xhtml">
   3:  <head id="Head1" runat="server">
   4:      <title>Confirm Create Product</title>
   5:  </head>
   6:  <body>
   7:      Thanks for creating your product. 
   8:      <%= Html.ActionLink<ProductsController>(c => c.Create(), "Click here") %> to create a new one.
   9:  </body>
  10:  </html>

And that's it. As you can see from the Create view, when writing our textboxes, we give them a default value from the ViewData. You can download the sample application with this pattern running here. Please let me know of any suggestions or issues.

kick it on DotNetKicks.com


Currently rated 4.3 by 15 people

  • Currently 4.333334/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Comments

May 13. 2008 20:57

Pingback from weblogs.asp.net

ASP.NET MVC - Using Post, Redirect, Get Pattern - eWorld.UI - Matt Hawley

weblogs.asp.net

May 13. 2008 22:24

Could you make the body text lighter grey? I can almost read it.

Rik Hemsley

May 14. 2008 01:49

Pingback from alvinashcraft.com

Dew Drop - May 9, 2008 | Alvin Ashcraft's Morning Dew

alvinashcraft.com

May 14. 2008 02:52

you beat me to this post! Smile

Great stuff, I will definitely point to this in the future.

Ben Scheirman

May 14. 2008 02:54

Great Post! One quick question - what do you use to display your code in your blog posts? Is that a LiveWriter plugin? If so, could you kindly post/email me the link?

Thanks!!

Danny Douglass

May 14. 2008 03:04

Woudn't this be easier?

1. HTTP GET of "/products/create", "Create" view is rendered
2. HTTP POST to "/products/submit"
3. Validation Fails, "Create" view is rendered with error message
4. HTTP POST to "/products/submit"
5. Item is created, redirect to "/products/confirm", "Confirm" view is rendered

This way you don't need to store anything in your temp data between create atempts and you don't get a repost on the confirm screen. A refresh at step 3 will only re-submit bad data, which will fail and they will get the create screen, so the only thing that could be lost is any data they have updated in the form before refreshing.

Mike

May 14. 2008 03:40

@Ben - Smile I'd still like to see your thoughts, drop me an email when you post.

@Danny - yes, it's a Live Writer plugin, just search on gallery.live.com (gallery.live.com/liveItemDetail.aspx)

@Mike - yes, that is perfectly a viable solution, I even stated you could do this. However, the reason of this post was to introduce you to PRG pattern as another alternative. It ultimately comes down to are you a HTTP purist or not, as a HTTP purist would say PRG is the method you should use.

matthaw

May 14. 2008 04:03

Did the spec review give you the idea to write this post? ;)

Haacked

May 14. 2008 04:40

@Phil - no, its been on the back of mind since we started using this pattern in CodePlex Smile

matthaw

May 14. 2008 05:10

I don't see why this pattern wasn't possible with "regular" ASP.NET. All TempData does is put stuff into Session.

foobar

May 14. 2008 05:54

@foobar - I kinda called that out. But you are correct, you could do this in ASP.NET web forms, but unfortunately it's not easy, and just much easier for people to use the Postback model.

matthaw

May 14. 2008 06:55

Not easy? I'd say it's pretty trivial, actually.

foobar

May 14. 2008 08:04

Pingback from hsidev.wordpress.com

ASP.NET MVC Resources « HSI Developer Blog

hsidev.wordpress.com

May 14. 2008 15:21

I second Rik Hemsley. Text color is extremely dark. And funky, too--797b7a. Why not make it even lighter? How about eeeeee? And make it smaller, too, please.

barfoo

May 14. 2008 15:44

@Rik / @barfoo, what text are you referring to that you need lighter? Drop me a line.

matthaw

May 16. 2008 17:22

Pingback from blog.cwa.me.uk

Reflective Perspective - Chris Alcock » The Morning Brew #91

blog.cwa.me.uk

May 17. 2008 00:53

Please, people stop this "light text on white background" nonsense. It is not cool. It is so hard to read..

zed

May 17. 2008 15:12

I must admin, I don't follow what's special here. Apparently I've been using the long lost PRG pattern since the early ASP.NET betas:

- Create.aspx button SubmitButton is clicked
- if (! IsValid) return; causes the page to re-render with a validator error message
- Create.aspx button SubmitButton is clicked again
- this time validation passes, item is created, at the end of SubmitButton_Click method we do a Response.Redirect("Confirm.aspx ...")

Looks just as trivially easy to me. Can also do a Server.Transfer to avoid using Session and/or QueryString.

Michael Teper

May 18. 2008 18:49

Pingback from code-inside.de

Wöchentliche Rundablage: ASP.NET MVC, Silverlight 2, TDD, WPF, jQuery… | Code-Inside Blog

code-inside.de

May 18. 2008 23:38

@Michael - doing a return in your button click doesn't do a redirect upon a post. If at that point, you hit F5, you'll get the prompt to resubmit your posted data. Server.Transfer still may not work as your last request from the client is still a POST and not a get.

matthaw

May 19. 2008 12:41

Matt, that's fair enough (re: the return). I stick it in there for safety/completeness, but I usually code the validation on the client as it's friendlier that way.

My point wasn't to dismiss MVC -- I can appreciate the benefits. What I don't follow is why the move away from server controls and towards spaghetti code. That seems backwards to me. For my part, I am waiting for MVC v2 that brings server controls into the fold.

Or maybe I am just missing something, but in that case the "a-ha!" moment hasn't happened yet for me.

Michael Teper

May 24. 2008 06:46

Great article, I was wondering what the best practise was for sending view data from submit to create via a redirect...

One thing that can save a little time (and I'm sure this was left out for clarity) is to use:

BindingHelperExtensions.UpdateFrom(viewData, Request.Form, "create");

To populate the view data, then:

TempData["createViewData"] = viewData;

Before the redirect. Note that I store the validation errors on the view data between those two lines.

Thanks for posting Smile

Harry

June 20. 2008 02:36

thanks

that's very helpful

M.S. Babaei

June 28. 2008 13:59

About Redirect to other web address // html code --

html-lesson.blogspot.com/.../...to-web-addres.html

adobe photoshop

March 15. 2009 12:47

Pingback from weblogs.manas.com.ar

Brian J. Cardiff » ASP.NET MVC Guidelines: Notifications

weblogs.manas.com.ar

March 24. 2009 03:08

Pingback from lemtoks.dreamhosters.com

ASP.NET MVC — RC1 — Паттерн Post-Redirect-Get « Test

lemtoks.dreamhosters.com

March 24. 2009 12:14

Yea i like this pattern, even more now

Bayram Çelik

April 5. 2009 15:36

Pingback from weblogs.asp.net

ASP.NET MVC Best Practices (Part 1) - Kazi Manzur Rashid's Blog

weblogs.asp.net

June 28. 2009 00:28

Nice article.The code works fine and is a good starting point for me making a custom module.Thanks for the module..

http://www.kenoplay.net

July 4. 2009 02:32

I think CakePHP’s learning curve is quite simple but I had few contact with it. Some friends already done some works with it and I’ve seen several issues generated by its structure making you a little hand-tied. I’ve started writing my own based on several practices (lots from Rails) because I wanted to run Smarty for View layer and PHP Doctrine as model. I can send you to take a look if you want. Its totally unobstrusive, MVC, DBAL/ORM and has some neat features (and others still under implementation).

free online casino website

July 4. 2009 02:55

hey should really known the importance of a blogengine so that they can make their own,thanks for sharing it,

ZK@Web Marketing Blog

July 4. 2009 11:04

Pingback from wukangrui.net

ASP.NET MVC 最佳实践(二) | 所谓技术 - 小李刀刀博客

wukangrui.net

July 5. 2009 19:45

How can i do image compress and decompress through coding in ASP.net?

Life Insurance

July 10. 2009 19:50

Thanks for sharing the info and Thanks once again for the code as well. Appreciating your efforts on this activity.

Online Poker

July 13. 2009 20:26

TempData is something very interesting. Thanks for the post. I have got some useful info from this on how to code

Online Poker

July 14. 2009 20:30

I think this is a good point. thanks for the great article, this really nice blog

Internet marketing

July 21. 2009 03:48

Thank you for useful information was a good article

sex movies

July 22. 2009 18:57

I really like this post. Thanks for this article, Anyone got any more info about it? I am now your blog' s rss follower. you are now in my bookmarks.

sbs tercih sonuçları

July 22. 2009 19:59

thanks you

Porno izle

July 22. 2009 23:42

Post2c Redirect is a great way to incorporate redirects to a page, however, there are other methods as well.

Ways to Make Money

July 26. 2009 12:23

I'd say it's pretty trivial, actually.

website logo design

July 26. 2009 12:24

Thanks for the module.

Logo Design

July 26. 2009 12:24

It is so hard to read.

stationery logo design

July 26. 2009 13:22

I can almost read it.

custom logos

July 26. 2009 13:22

thanks for sharing it,

brochure design

July 26. 2009 13:26


I must say great website. I have just googled it nice info out there.

SEO

July 30. 2009 06:13

This really teaches me ASP.Net as I was learning it. I need to have much tips on it.

Essay Writing

July 30. 2009 06:15

I went to search more info on it's inner pages too. It is really a good site. A valuable site.

Coursework

July 30. 2009 06:24

I never knew that. These are some really intriguing details. Thanks ever so much.

Animal Friend Insurance

July 31. 2009 12:35

Thank you for useful information was a good article

Assignment

August 3. 2009 00:21

Thank you very much for this article, has served as much to me and my colleagues look forward to your website to gather more news

Without Deposit Casino

August 4. 2009 06:58

hi all.
thank too the apple. http://www.germanporn.tk

Porno filme

August 4. 2009 07:00

Thanks a lot for this scripot.I have been looking for it for a long time http://www.tvsexizle.com

Porno izle

August 4. 2009 10:03

It is a great script writing. . I have got some useful info from this on how to code. It is very interesting.
Regards,

holidays in marbella

August 8. 2009 04:44

it is an informative article and ASP>Net can be easily learnt from it.

process monitoring

August 9. 2009 02:22

Its the post i really looking for i like to blog and i want to be a member of this thanks for post

forniture tatuaggi

August 9. 2009 03:42

ASP.NET tracing enables you to view diagnostic information about a single request for an ASP.NET page. ASP.NET tracing enables you to follow a page's execution path, display diagnostic information at run time, and debug your application. ASP.NET tracing can be integrated with system-level tracing to provide multiple levels of tracing output in distributed and multi-tier applications.

Commercial Mortgage

August 9. 2009 21:55

the post is superb and i have bookmarked this page.

diet plans

August 9. 2009 22:42

I don't see why this pattern wasn't possible with "regular" ASP.NET. All TempData does is put stuff into Session.
Emo Hair

Emo Hair

August 9. 2009 23:29

Thanks for helpful information you catch up us with your instructional explanation.

Custom Dissertation

August 9. 2009 23:29

This is really a good provision of the tools. It helps much for me in the link building services. Thanks for sharing.

Custom Research Papers

August 11. 2009 03:07

Could you make the body text lighter grey? I can almost read it.

tiffany

August 11. 2009 04:39

This is an awesome collection I had. Really impressive.

Research Paper

August 11. 2009 04:40

The debugging your application. ASP.NET tracing can be integrated with system-level tracing to provide multiple levels of tracing output in distributed and multi-tier applications.

Coursework Help

August 12. 2009 19:31

Yes, this is information in this article is all true. Thanks

how does viagra work

August 13. 2009 18:43

I am ullu ka pattha..............

Junaid Siddiquki Bhosadi wale

August 13. 2009 18:44

sdfsadfsadf

Junaid Siddiquki Bhosadi wale

August 13. 2009 18:44

sdfsadfsdfsdf

Junaid Siddiquki Bhosadi wale

August 14. 2009 16:12

Can u compare jsp and asp.net over security issues, fastness, cost effective? Which is best to avoid hacking?

seo company

August 14. 2009 19:53

Hi,

Good post......Thank you very much for posting this article.This post gives a lot of information for me to go forward..

online poker

August 30. 2009 04:40

Interesting post. Definitely one I'll share with friends!

buat blog

August 31. 2009 01:50

Yes, this is information in this article is all true. Thanks.. check my site for auto insurance

cheap auto insurance quotes

August 31. 2009 09:00

Very useful information, everyone will
benefit,see you later friend's
You have done an excellent job

vietnamet

August 31. 2009 10:23

Nice Post
Informative and useful one
I am .Net Developer and I am looking for this
Thanks for the great stuff.

Nimesh – Perception System

September 5. 2009 07:09

The ‘resend’ box that pops up as mentioned in this post is indeed annoying for many web users. If they are presented with it too many times on the same site, they may even give up and go elsewhere. This is one example where a confirmation box can actually be extremely annoying.

So this new way of using the Post, Redirect, Get pattern is much better for both the website owner and the website visitors. Just as with search engine optimisation and all other important focuses, we must do everything we can as site owners to make our websites easy and accessible to everyone.

search engine optimisation

September 7. 2009 20:43

this is really excellent post..it gave me lot of information..thanks for saving my time....

Free online games

September 9. 2009 07:09

I have seen this topic in another blog, yet i think the tips there are not thats useful. Are you sure we will get quality service when we follow your tips on this topic. I just want to make sure that i get the best result.

Quick weight loss plan

September 12. 2009 06:32

It is indeed a great resource to obtain information on this subject. Keep posting. Thanks.

Enduring Power Of Attorney

September 14. 2009 02:40

You made some good points there.I did a search on the topic and found most people will agree with your blog.Thanks

payday loans

September 14. 2009 03:05

We are a group of volunteers and starting a new initiative in a community. Your blog provided us valuable information to work on. You have done a marvellous job!

payday online

September 15. 2009 06:56

Toto ozn�men� o stavu doru.en� je generov�no automaticky.

cash loans

September 15. 2009 07:19

Does this redirect work with blogengine.

Paul

September 17. 2009 17:59

I loved the editorial. It is very interesting. Thank you for the information. I will be back. [url=http://www.canadaonlinepaydayloan.com/]quick cash loan[/url]

payday loans in canada

September 19. 2009 19:09

Good comments, and nice blog, nice informations, great !

hulahaka

September 19. 2009 19:09

Many greetings
Thank you for sharing that with us

3qs

September 24. 2009 23:45

Great blog.It is really informative article. Thank you for sharing your experience and teaching us.

chat software

September 25. 2009 05:47

thank you everyone for this wonderful info
thanks again

Canon digital camera

September 27. 2009 06:09

This blog is going to be impressive resource. Thanks a lot for a collection of good tips. I look forward to reading more in the future. Keep up the excellent work!

payday loans in canada

September 27. 2009 06:09

Thank you for your special report. It has tons of information, thanks for posting this blog.

payday cash advance

September 27. 2009 06:10


Great blog! I really love your ideas! I can use some on my upcoming business. Thanks!

online payday loan canada

September 27. 2009 06:11

Good article.The information on this is very inspiring.

payday cash

September 27. 2009 06:12

Works excellent for me, and keeps things organized in a fresh unique manner!
I would like to thank you for sharing this information to us.

payday loans ca

September 27. 2009 10:26

It can help me enhance my html skills. Thanks

Paulwilliams

September 27. 2009 11:00

Post, redirect, get pattern is indeed the most user friendly option, both for the developer and the regular internet user. The all re-submit question is really solved by your insight.

Free Internet Advertising

September 27. 2009 16:48

this website is excellent for me and good for comments posting

canada drugs

September 27. 2009 23:16

live blog.. very useful!
thanks.

payday loans

September 29. 2009 17:46

We are XTGate which is a highly professional web programming, website design, business graphic design, custom webpage design and e-commerce website development company based in Los Angeles, California.

Web design

September 29. 2009 17:58

Always leading the avant-garde of fashion without compromising traditional craftsmanship of luxury leather goods
[url=http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com ] louis vuitton [/url]
[url=http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com ] Louis Vuitton Replica [/url]
[url=http://www.tiffanysilverworld.com ] Tiffany Jewelry [/url]
[url=http://www.tiffanycoltd.com ] Tiffany Jewelry [/url]
[url=http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com ] Louis Vuitton outlet [/url]is also active in other ...Cheap
[url=http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com ] Louis Vuitton Replica [/url] Handbags,Purses,Wallets Outlet and
[url=http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com ] Louis Vuitton Replica [/url]Designer Bags,Shoes Outlet Store - discount price is our special offer, [url=http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com ] Louis Vuitton Outlet [/url]
[url=http://www.luxesaler.com ] louis vuitton [/url]
[url=http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com ] louis vuitton sale [/url]
[url=http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com ] louis vuitton online shop [/url]
[url=http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com/articles/Louis-Vuitton-Wallets.html ] louis vuitton wallet [/url] is also
[url=http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com/products/17495.html ] louis vuitton [/url]
[url=http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com ] Louis Vuitton Speedy [/url]
[url=http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com/articles/Cheap-Louis-Vuitton.html ] cheap louis vuitton [/url]
[url=http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com" rel="nofollow">http://www.favorluxury.com/articles/Discounted-Louis-Vuitton.html ] Discounted Louis Vuitton [/url]
[url=http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com/articles/Louis-Vuitton-Online-Shop.html ] Louis Vuitton Online Shop [/url]
[url=http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com" rel="nofollow">http://www.louisvuittonlive.com/articles/Louis-Vuitton-Sale.html] Louis Vuitton sale [/url]

cheap louis vuitton

September 29. 2009 18:23

The text is really original and I have never seen a post like that before.

Russian translation

September 30. 2009 15:25

thank you for great job

build outdoor fireplace

September 30. 2009 17:48

thanks for the useful resource i have just started using as.net and having some difficulties too...

logo design

September 30. 2009 22:49

Nice patterns.

cd rates

October 1. 2009 14:34

Thanks. I don't understand this but my programmer does.

Product Package Design

October 1. 2009 14:36

Great post. The screenshots are very helpful

Storyboard Design, Storyboard Artist, Storyboard Illustration

October 1. 2009 15:06

Yeah

The Post, redirect, get pattern is indeed the most user friendly option, both for the developer and the regular internet user.

The all re-submit question is really solved by your insight.

ecommerce web design

October 3. 2009 18:06

Really unique content. Enjoyed reading it.Keep up the good work.

waterproofing

October 3. 2009 18:08

Never knew that. Thanks for the info. I think your blog is going to
do well. People will always return to read this kind of content.Great job.

kitchens | Cupboards

October 4. 2009 14:55

I have lot of HTTP experience, but not know about this points. Such small things really remain behind. Thanks for tracking back on this Products/Create.aspx pages coding.

Moving Boxes

October 4. 2009 15:00

Really every time when i implement my Create action, I have never bother about the validation may fail and I may need to re-display the form. so it was happening again and again and user have to reload the page.

Thanks to u for making me out of it. Now i got to re-display the form directly when validation fails.

Car Shipping

October 6. 2009 11:10

This is the first time I am visiting this post.I have gathered much of it.Really a interesting firm things. Thanks for sharing. free classified websites http://informationex.com

ad posting

October 10. 2009 04:55

Wonderful article, thanks for putting this together! This is obviously one great post. Thanks for the valuable information and insights you have so provided here

adult chat rooms

October 10. 2009 07:46

Never knew that. Thanks for the info. I think your blog is going to

live score

October 10. 2009 07:46

Thanks to u for making me out of it. Now i got to re-display the form directly when validation fails.

international soccer scores

October 10. 2009 07:46

thank you for great job

Kamagra distributor

October 10. 2009 07:47

Thanks. I don't understand this but my programmer does.

kamagra buy

October 11. 2009 15:35

This is obviously one great post. Thanks for the valuable information and insights you share

Ares

October 14. 2009 05:00

This is easier and surely gives comfort to internet users. Thanks for sharing. Post like this offers great benefit. Thank you!

Acne

October 14. 2009 09:10

Awesome! Some really helpful information in there. Bookmarked. Excellent source.

pest control st George

October 15. 2009 05:45

Great article. Very informative. Thank you for sharing it.

Drug Abuse Treatment Center

October 15. 2009 08:25

This is obviously one great post. Thanks for the valuable information and insights you share

free games

October 15. 2009 19:21

great tips thanks.

get backlinks

October 15. 2009 19:25

Good and helpful information, thanks.

sedum plants

October 16. 2009 02:40


Awesome! Some really helpful information in there. Bookmarked. Excellent source.

Vibrators

October 16. 2009 12:58

Nice this is interesting!!!!!!!!!!

Free Online Games

October 16. 2009 15:00

Welcome us to patronize to thank has looked at me theory

pretty-tiffany

October 16. 2009 15:00

Welcome us to patronize to thank has looked at me theory

pretty-tiffany

October 17. 2009 00:05

well,this is a good post.. i have red your article it was pretty good post..you made some good points..i learned so much from your blog.
thanks for sharing good info.
regards,

Apex Professionals LLC

October 17. 2009 01:36

great site

vigrx plus

October 17. 2009 02:15

hey should really known the importance of a blogengine so that they can make their own,thanks for sharing it

free online games

October 17. 2009 02:23

Great blog.It's really informative article. Thanks for sharing your experience with us.

kitchen designs

October 17. 2009 14:37

Thanks!I will show it to my programmer and I am sure he will appreciate your effort

Acai Berry

October 19. 2009 05:11

Some really helpful information in there.

chests

October 19. 2009 11:08

Hi, I really enjoy reading your website. I got many ideas for my blog. Thanks for the information.

investment company ratings

October 20. 2009 09:03


<a href="www.accessoriesmagickingdom.com/Jewelry.html">costume jewelry</a>

costume jewelry

October 20. 2009 12:15



This is easier and surely gives comfort to internet users. Thanks for sharing. Post like this offers great benefit. Thank you!

poker

October 20. 2009 12:29



this website is excellent for me and good for comments posting

buffet

October 20. 2009 17:19

Really enjoyed reading this blog, please keep posting new info, have bookmarked your page.

Yahoo Login

October 20. 2009 21:32

Great website, I'mglad I stumbled across it!

Freight Forwarders

October 21. 2009 02:21



Really enjoyed reading this blog, please keep posting new info, have bookmarked your page

ed hardy clothing

October 21. 2009 13:35



the post is superb and i have bookmarked this page.

Online geology degree

October 21. 2009 14:31

i have red your article it was pretty good post..you made some good points..i learned so much from your blog.
thanks for sharing good info.

silver

October 22. 2009 08:06

<a href="http://xrka.com">Amazing jokes</a>

Amazing jokes

October 29. 2009 15:05

Pingback from lybecker.com

ASP.NET MVC Best Practices | Anders Lybeckers Weblog!

lybecker.com

November 1. 2009 09:57

Pingback from 51jquery.com

陈超群’s Blog » 【转】12个asp.net MVC最佳实践

51jquery.com

Comments are closed

Copyright © 2000 - 2010 , Excentrics World