Suggestions for ASP.NET Website [closed] - asp.net

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I am working on big application build using ASP.NET which was started 1.5 years back. The Site uses 3rd party telerik RadControls for UI. The problem with the website is it uses outdated stuffs like DataSets and all with no proper architecture. I have done some research and found some new technologies like ADO.NET Entity Framework out here. I want to know that is it worth investing to learn and migrate my site to ADO.NET Entity Framework at this stage.
Additionally are there any good technologies or tools (that can be used in ASP.NET) out there in the market which can be used to make the development life easier and be upto date with latest technologies.
ALL SUGGESTIONS WOULD BE REALLY PRECIOUS.
THANKS IN ADVANCE.

There is no real answer to this question.
Entity Framework is very useful. As is ASP.NET MVC. I guess it depends on what your metrics are to determine if it is worth it.
What are the goals for migration? Are you looking for a more testable website? Its unlikely to be worth migrating a large website just for the sake of it, so determining the measure of a successful migration may naturally lead you to a decision.
Its also worth noting that ASP.NET Web forms are still a viable option. If you want rapid development, which uses data grids and such like, then forms might be your best option. You could look to move to MVC, which will allow you to enforce a cleaner separation of concerns. Its horses for courses. A quick Google and you will find plenty of forms vs mvc pros and cons.
You could also consider a piece meal migration. For example, you could build and Entity Framework model of your database and start to use it one page at a time. Slowly removing ADO, but maintaining a working site. You can also use Forms, and MVC together in one site. So you don't have to do a complete migration in one go.
Food for thought, good luck.

The problem with questions like this is that the answer is always "it depends" however, having recently done some work with Entity Framework and MVC3 I will say that it is a very good platform to work with- MVC3 is logical and easy to work with and EF does a bunch of lifting for you.
Ultimately it depends how far along the project is and how much of it is complete in the way that it currently works. For example, if you have a decently designed database and a bunch of half finished pages then making the switch is probably not going to be a lot harder than finishing up with what you have, but don't underestimate the sheer scale of a rewrite when combined with the need to learn to use several new technologies even if the technologies themselves are fairly quick to learn. On any project of significant size you will run into quirks of the platform you are working with and find yourself completely stumped at least a few times.
On the other hand, the idea that something being outdated is a reason to replace working code is one that tends to result in expensive, embarassing project overruns. If it's most of the way finished and you are just lined up to do finishing touches then make the best of what you have and remember that Shipping Is A Feature. Similarly the size of the project and how business critical it is have a big impact. If this is a minor internal project maybe you have more room for a rewrite, if it is responsible for the company's revenue stream you need to get this version out fast and then think about refactoring later.
Either way, you need to talk this over with other stakeholders before throwing yourself into a potentially high-risk endeavour.

I have generally used Obout controls as a third party toolkit. I wish I could help more about switching to ADO.
Although, I don't suppose learning it would hurt, even if you don't end up using it for this particular project.
Good luck!

It all depends... Can you afford to migrate? Is your current framework not what you need it to be?
If you want to throw away 1.5 years of development just because something new has been released, maybe you should think twice. You surely know there's another version of .NET framework coming and who knows what will it bring? Does it mean that you will migrate again next year or so?
However, if you have designed your website the way it can be easily done, by all means, switch to new technologies and migrate how much you want and how you feel comfortable.

Whether or not it is worth converting your application to EF is a decision only you can make. You know the existing code base better than any of us. Evaluate how much code you would need to change, how much time you have, how much re-testing you would need to do, and so on. Depending on what you find, that will tell you whether you should upgrade or not.
I would love to upgrade every asp.net 2.0 app I find to MVC3 with EF, but usually time and resources only permit that we fix what is broken and move on the next project.
That said, EF is a wonderful advancement in data access. If it isn't worth doing on this project, it is definitely worth learning for the next one.

Related

ASP.NET Code Generator [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I have a SQL Server Database. I would really like to quickly generate a middle-tier and a front-end from this database. I would prefer something that generates web forms if possible. I understand that no code-generator will be phenomenal. However, I just want something to get me up and running quickly that I can then customize as needed.
Can anybody recommend any code-generators?
Thank you!
There is ASP.NET Dynamic Data. If you can live with MVC, EF4 and MVC3 would be my choice above Dynamic Data.
I have a friend who is releasing a code generator very soon. You provide xslts based on the data model to create classes at any layer you want. Here is the site: Code Generator
Be sure to check out the sample project.
I have successfully used Code Smith (commercial product).
It is a popular templating engine and you will find many templates on the Internet for all kinds of architecture / data access frameworks.
I have also used plain T4 templates that you can use within Visual Studio without having to install anything (although I would recommend using something like Tangible T4 Editor to get color syntax).
If you have Visual Studio (2005 or greater) you might consider T4 templates. There's a good introductory video at DNRTV. T4 is a little known code generation facility that comes with all editions of Visual Studio (even Express I believe).
On some of my projects I have used MyGeneration, a free and open source code generator. This is also a good option.
You can use Entity Framework to generate objects from database schema, and then use the MVC Framework to generate stronly-typed views that use the said generated objects as models.
Here's a good post on that - http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx
I'd give SubSonic a try, especially the ActiveRecord version. It basically will generate an interface(with Linq) to an existing SQL Server database, For taking it to forms, I suspect you won't find a very good solution because there are so many implementation details that are commonly placed in webforms, such as XSS prevention, how things should look and behave, etc.
I suggest a tool that I have use for really rapid application development, is the asp.net maker. http://www.hkvstore.com/aspnetmaker/
I have used it for low budget projects, or where I need for a dirty quick solution, until the final gets ready. What I have did is that I create solution for the easy tables, and make code for the one that need too many thinks to be fix.
The pros is that have many future, its very easy and you do not need to know almost anything to make the interface, create from the database, all the environment that can edit it, have the opportunity to make a lot of adjustments, and what you get is a better page than the Scaffold can product.
The negative is that you stick with what this tool product, and you can not update the pages by your self to make some small changes, because is too complicates one, second if anything change, the pages changes, and even if you rename it and not overwrite it, it maybe not working.
You need to test it and see by your self.
Redbrook Technology has a great ASP.NET forms and code generator. It's also very cheap. Give it a try - ASP.NET Generator

Refactoring an ASP.NET 2.0 app to be more "modern" [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
This is a hypothetical scenario. Let's say you've just been hired at a company with a small development team. The company uses an internal CRM/ERP type system written in .NET 2.0 to manage all of it's day to day things (let's simplify and say customer accounts and records). The app was written a couple of years ago when .NET 2.0 was just out and uses the following architectural designs:
Webforms
Data layer is a thin wrapper around SqlCommand that calls stored procedures
Rudimentary DTO-style business objects that are populated via the sprocs
A "business logic" layer that acts as a gateway between the webform and database (i.e. code behind calls that layer)
Let's say that as there are more changes and requirements added to the application, you start to feel that the old architecture is showing its age, and changes are increasingly more difficult to make. How would you go about introducing refactoring steps to A) Modernize the app (i.e. proper separation of concerns) and B) Make sure that the app can readily adapt to change in the organization?
IMO the changes would involve:
Introduce an ORM like Linq to Sql and get rid of the sprocs for CRUD
Assuming that you can't just throw out Webforms, introduce the M-V-P pattern to the forms
Make sure the gateway classes conform to SRP and the other SOLID principles.
Change the logic that is re-used to be web service methods instead of having to reuse code
What are your thoughts? Again this is a totally hypothetical scenario that many of us have faced in the past, or may end up facing.
You missed the first step that I would go through:
Cost-Benefit Analysis
Refactoring an app because you think it feels old is not a good reason. It's still running (I'm guessing fairly reliably by this point) and your company already has a lot of time and money invested in the code.
You probably also have a team of developers that are familiar with .NET 2.0 and WebForms whereas many may not understand the concepts/code you're trying to introduce.
Before changing anything, figure out how much money is invested, how much money you're going to spend on your changes, and how much money it'll save in the future...
If the numbers don't add up, no business is going to let you proceed.
Make sure you have a complete suite of tests to cover the existing code before you go tearing it up.
Write new features using your new techniques.
Update old code to the new techniques if it needs modification because of a feature request.
Refactor old code that doesn't need changes only if you are bored and have no new features to write.
While it can be tempting, I personally would not make these major changes to the architecture of the application unless they are satisfying specific user requirements. Simply implementing these to make the application better in terms of maintainability sounds like a big risk. You may get 60% of the way through and find major challenges with getting one of these changes to integrate with the rest of the legacy application. It sounds like you'd almost be facing a complete rewrite of the application to ensure everything is consistent with the new architecture. You may invest a lot of time into the rewrite, and find that the maintainability has only improved a little such that recapturing the time invested in the rewrite will take a long time.
If it were really poorly written or in a legacy language like VB6, I would personally say it would be a candidate for a major rewrite. However, .NET 2.0 is a very capable language and for alot of applications is not crippled. From your description it sounds like the application is pretty well designed as is. It actually has a data access layer, business objects, and is layered in some way. This sounds like a pretty good application considering you can identify these attributes. Consider yourself luck that this isn't some app where it's such a mess you can't pick out anything that resembles a particular design pattern.
Maybe there are places where the things are a little nasty, but sometimes it's not pretty where the rubber meets the road and things get wired together.
I agree with other posters, dont rewrite unless you can demonstrate the cost saving benefits.
What you could do is write new areas of the system using eg entity framework, MVC and jQuery because the difference will be transparent to browser users. In time you can move the legacy code over bit by bit as you make upgrades/enhancements.
Its also always easier to implement new technologies on new system code, rather than porting existing code.

What is the fastest way for a new programmer to learn ASP.net?

I want to learn ASP.net 3.5 effectively, but I have no fluent knowledge of any other languages.
Now the scenario is that span of time is very less and in short time I have to be upgraded with ASP.net skills.
So I am interested in fast and effective way to learn ASP.net 3.5.
I have to start from scratch.
Please..please........I want solution as soon as possible.........
And please mention good books and online material.
Thanks.Waiting for reply.
First thing is to drop statements like: "I want solution as soon as possible". To learn something new takes time and you'll need to cool down before getting results.
I strongly recommend you to build something for yourself. This way you can deal with new requirements and schedule pressure. During this process, you'll need to see how other people do same thing, and then to download some sample codes.
EDIT: I think you should start doing that every application does: trying to access a database and changing data. This path will lead you to know more about Entity Data Model and LINQ. So you can go to code your front-end. You can take a look at NerdDinner website for MVC samples.
There are plenty of good tutorials at asp.net/learn.
If you're interested in ASP.NET MVC (Microsoft's latest web UI framework) then there's a good set of tutorials at asp.net/learn/mvc/#MVC_Overview
It might be worth mentioning that you have a choice of programming languages to use; VB.NET or C#. If you are new to programming then you might want to spend some time getting comfortable with one of these initially, as well as familiarising yourself with the underlying .NET Framework.
If you can provide more details about what you need to achieve, as well as your programming background then people will be able to provide advice that is more specific to your situation.
It takes about ten years, as does learning anything worthwhile.
The best way to learn a new set of development skills is total immersion in a project. Build your own website and follow along with a book or two, make some mistakes and fix them, and in general endure all the rough-and-tumble that development involves. Along the way, make sure you're investing good time in writing solid unit tests, so that you understand what they're for and why you should be writing them.
If you've never programmed before, this is going to be rather challenging as a first project. ASP.NET MVC requires understanding, if not fluency, of many different pieces of web development. But dedication, persistence, and curiosity will be enough to win out here.
I think reading a good book while implementing some basic website will be your best approach.
My personal favorite, with good inside examples and good practices is Pro ASP.NET MVC
Get a book like ASP.NET 2.0 Website Programming from Wrox Press and work your way through it from beginning to end. Immerse yourself this this project, follow all the steps and understand every step along the way.
Microsoft offers 2 distinct Web development systems - "Classic" ASP.NET WebForms, and MVC. In my opinion MVC is more "pure" to the web philosophy but is trickier to learn, the controls aren't as rich and varied, and there are fewer resources to help you. WebForms have been around much longer, there are thousands of books and helpful sites, and there are probably more job opportunities.
Good luck. If you're smart and work really hard, you should have no trouble.
Saying you want to learn ASP.NET from scratch is like saying you want to learn to build a house. You can get a book that shows you how to saw lumber or nail boards together -- but there's a lot more to building a house than any book can effectively communicate.
Learning a specific control or a narrow skill can be done in a few days, but really learning ASP.NET from beginning to end is a multi-year project -- particularly if you have to learn the language too. Learning C# well could take a year by itself.
Experience is the best teacher. If you can get a mentor of some kind involved, that's even better (just like how carpenters need to apprentice for some time before they're ready to build a house by themselves).
In all seriousness, start with at least 3 years at university doing a computer science/engineering course of some description.
There is no fast and "effective" way of learning to program and being any good at it. There's a lot, lot more to software development than just the code as anyone who has been doing it for any length of time (and cares about their craft) will attest to.
Can you define what exactly do you mean by "learn effectively"? Do you mean that you want to be able to write code like Jon Skeet at the end? Or do you mean that you should be able to handle the job of a junior developer? There is a lot of room between those, to say nothing of you not stating how you learn best: Do you absorb information best from reading, seeing, doing, or some other format of data? How good are your Google skills? How well do you know of MSDN and the massive amount of information contained within?
Scott Gutherie's blog may not be a bad idea for another resource to consider. Another point to consider is however fast you want to learn 3.5, there will soon be a 4.0 that may be out sometime this year as part of Visual Studio 2010.

What is your company's stance regarding (technological) 'innovation'? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 3 months ago.
Improve this question
.NET 3.5, .NET 4.0, WPF, Silverlight, ASP.NET MVC - there's really a lot of new Microsoft technology released / on the horizon to try out these days.
(The examples I gave is all Microsoft technology but this can apply to any language or platform). I am curious how this is handled in the company you work for. A few examples:
Do you have a CTO that determines what technology the company uses?
Are development teams free to choose what technology they use? For example: framework version, classic ASP.NET vs ASP.NET MVC, ADO.NET Entity Framework vs Linq2Sql or NHibernate? Or a mix of these?
What new technologies does the company you work for try out and why?
Does your company have dedicated resources (time) to try out WPF or whatever technology, just for research, or do you try things out in your spare time and try to introduce them to your company?
These are just examples to make my question clearer. To summarize, I'd like to know what this process looks likes, who is responsible, who makes the decisions. Does your company jump on the bandwagon, or is it reluctant to try new technologies? And are you comfortable with this situation?
At the company I work for, we still use .NET 2.0 (although we are now slowly switching to .NET 3.5), haven't seriously looked into ASP.NET MVC, haven't tried out WPF at all, etcetera. And, some find it pretty hard to convince people to do. Is it fair to expect otherwise?
At my company, we have an architecture group that determines which technologies are used. People are welcome to read up on alternative technologies and make suggestions, but at the end of the day, it's the architecture group that makes the decisions.
While this may seem restrictive, it does ensure that all of the development groups are using the same or similar technologies, and moving from one group to the next is fairly easy. As well, by having one group do all the research, you ensure that you don't waste time by having multiple groups duplicate the research effort.
Since I work in such a small company and am I typically either the only developer, or the lead developer in a very small group, I can usually convince my boss to use whatever I think would be the best for a given project/situation.
We stick to what we know for our major and key projects within the company.
For any new "mini" projects that come along, we take the hit on the learning curve to try and build them in the latest technologies if at all possible.
This enables us to get up to speed on these things to then comfortably and safely use these technologies in our major projects as we see fit.
Where I work there is an architect team which looks at technologies from a high level and makes recommendations to various actual teams. A subset of the architect team actually takes the technologies and experiments on them and out of the produces
Internal 1 hour overview sessions
Week long boot camps
Whitepapers/Posters
The more important the technology is the more of that list is produced. All of that just feeds to teams, which combined with customer requirements for technology actually make the decision for what that team should use.
I have a mix answer to this question. Where I work, lower level technical managers are usually the ones that chose a certain technology and sometimes even the developers have the freedom to try something new. For example, I really wanted to learn about JavaScript's Prototype while working on a web site. I made the case to my boss, he was reluctant first because nobody else knew it or had used it before, but gave me the go ahead. It was great for me to be able to learn Prototype and take advantage of it's many built in functionality. Other bigger projects come down from higher management and we don't really have much of a choice. Right now, my company is adopting SAP, so everything is moving into that direction. I don't necessarily want to become an SAP expert, but if I want to stay here, I'll need to at least learn how to work with it.
Every company has its own pace for innovation, and it's dependent first on the comfort level of the managers, and second on whether anybody actually does the work to research and propose using new things. When the managers start getting uncomfortable, innovation slows or stops until they get comfortable again. Some innovations they will never be comfortable with.
Keeping this in mind, I'm not sure how to answer your question about whether or not it's fair to expect more innovation than is happening. Certainly it's reasonable for you to want more; equally, once you've hit your organization's speed limit on innovation, it's not likely to change and, if it does change, it will probably take a long, long time.
I've been given rather large amounts of freedom to change things by various managers in my past, and I took advantage of it. I also ran into the limits on a regular basis, and finally dealt with my frustration by starting my own company. (This may be considered a somewhat drastic measure; certainly by doing do you reduce the time you have to research and develop the very things for which you started your company.)
These days I'm developing rather significant applications in Haskell, and I'm pleased as punch. After a year, I'm starting to get the hang of it, and I certainly have several more years ahead of me just learning what I can do with the tools I have now.
I suppose the summary of my response is: if you want to innovate more than those around you, you need to change your peer group.
I think any company that tries new technology for the sake of it, as its bleeding edge and 'innovative' is crazy. To have a formal 'lets play with new technology to try it out department' is just nuts.... unless they're in the business of providing technology consulting to other businesses.
For everyone else technology is there to help the business get things done. Not to help developers line their CV's with cool sounding TLA's.
The company I'm working at the moment is quite large and has a CTO that chooses 'strategic platforms'. But I've have to say, if you can pick a technology, they're probably using it. They're too big to beat everyone down with the corporate stick, but they try. If the technology will work in the project and bring it in on time, then it gets used.
We need solid and proven platforms for our stuff. And, we don't need anything fancy. Therefore we might go for .NET after 5-10 years or so, hope it's ready by then. On the other hand, Java is already mature enough, so we're using it alongside with C++ and some Jython scripting. These decisions are pretty much autonomous (we're a small shop).
I don't mean to mock bleeding edge developers, but whether you need solidity or newest features obviously depends on what you're working on. Many scientists are still happily using Fortran 77.

ASP.NET Continuous learning

I've been working in ASP.NET for several years now (since the 1.0 days!), but I've never been formally instructed. I'm fully capable of doing pretty much anything I want and I've built several production-level, data-driven sites, including one that does over a million in sales a year (according to the owner). But I'm starting to get the feeling that the holes in my knowlege are dragging my productivity down. I read a lot and try to learn wherever I can to try to stay up with all the new technologies, but sometimes I just don't get it, and I think it's because of my lack of formal training.
Does anyone have any ideas on the best way to fill in these gaps without having to rehash the fundamentals?
Thanks
1) Read the Code of popular Open Source Projects. There are a few that have some really good practices in place.
I recommend checking out BlogEngine.NET. Also if you're more ambitious, I'd suggest looking at the code for ASP.NET MVC 1.0.
2) Sometimes you need to "get back to the basics" when you've been working with a particular framework since a much earlier version. In this case, it can be really useful to pick up a book that covers some of the newer features.
Here's a good book that shows of some of the new features in C# 3.0:
C# 3.0 Design Patterns
3) It may seem odd, but reading up on other languages/platforms (such as Ruby on Rails) will help you in the way you design your classes and code by taking tips of the good and bad of different platforms and combining them.
4) Read some books on general best practices and development methodologies.
Some of these books I recommend are:
The Pragmatic Programmer: From Journeyman to Master
Practices of an Agile Developer: Working in the Real World
Code Complete: A Practical Handbook of Software Construction
I'm in the same boat; been a .Net developer for 6 years. While I do have a CS degree, I don't have any formal training in ASP.Net; I learn it on the job as projects come up.
I found the best way to figure out what to learn is to keep your eye on .Net developer blogs. Some I follow:
David Hayden http://www.davidhayden.com/blog.aspx
CodingHorror.com (you might be familiar with it ;-)
Scott Hanselman http://www.hanselman.com/blog/
Usually from reading their blogs, I pick up on what the latest .Net solutions that are out there and point me in the direction of new tech I should look into further.
Overall though, I can only give you the advice I give junior devs at my company; realize you can't possibly be expected to know everything but always be eager to learn. Good luck!
I can absolutely identify. I've been programming since 1997 and really don't have any formal training to speak of. With regards to ASP.NET, everything I've learned has been through open code (Community Server, BlogEngine.NET, the other ASP.NET Starter Kits), books, LearnVisualStudio.net, and constantly being thrown in the fire.
I have a MASSIVE inferiority complex as I'm always wondering "did I do this the smart way or the inexperienced way". All I know is that my customers are happy, the errors that occur are few and are fixed quickly, and I keep getting work.
Luckily I have a passion for my work and that's what drives me to keep improving (slow though it may be).
If you're a "people person" then I think user group meetings are a great resource. I'm a bit of an introvert and unless someone who's smart reaches across and shakes my hand, I pretty much rely on the speaker's presentation to teach me something new. Probably not the best way to go and also probably why I don't go that much.
But again, I would stress the open projects, especially Community Server.
Seek out people better than you and learn from them.
Take some classes or join a user group.
If you are looking at conferences, consider finding a local Code Camp. These conferences are often very low key, but have excellent information content. They involve local presenters and attendees so you can build up your contacts and a set of people you can run things past when you need help. In addition, you might want to find (or start) a local .NET group where you can learn together. These can be hard to get off the ground, but when done well can be an excellent source of community learning.
Look for interesting ways to break your established patters - even at a loss of productivity.
Otherwise, it sounds like you are already in a pretty good spot. You can deliver on current requirements and sound like you can pick up new tricks when needed.
Really, the best way to learn new techniques is to work on a different project - even if that means changing jobs. If you have relevant and continuous experience since 2001, you should be able to pick your projects.
I've been coding PHP on a current project and it's been an interesting break from webforms. If anything, I'm getting good perspective on both models and really looking forward to doing some work in MVC.
I'll probably get some -1's for this, but as a fellow ASP.NET developer I don't think you really need to learn ALL that the framework has to offer. The reason I say that is that over the years my LACK of knowledge of all the cute little conveniences of ASP.NET has caused me to write better performing and more robust web apps for Windows. Balanced design patterns (separation of concerns) WITHOUT OVERDOING IT will make more of a "better" ASP.NET web app than using all of the controls and tools that come with the framework.
Case in point is the ajax stuff you get with ASP.NET, and also data binding. Since ASP.NET was late in the game with Ajax, I started off with my own ajax wrapper (based on an early ajax book) and then moving to jQuery. My co-workers all swear by the UpdatePanels and 3rd party controls, and quite often the user experience ends up worse and more confusing than a regular post back (and then we have to inject javascript to make it perform better and more seemlessly). As far as data binding, I've yet to find a canned control (from Microsoft or any 3rd party) that handles 2-way binding better than the framework Rick Strahl came up with back in the 1.1 days. We built a framework on top of a paper and some base classes he released, and I've yet to see something that I think handles data binding any better in ASP.NET (well...besides WPF/Silverlight...those frameworks really nailed it IMO).
So, to me, the path to upgrading your ASP.NET skills is to come up with some good ways to separate your business logic into logical components in the cleanest possible way, and learn the hell out of C# and JavaScript (and/or a JS wrapper library like jQuery). For me, coming from a LAMP background before learning ASP.NET, I absolutely love C# and Visual Studio, but I'm not such a huge fan of the high level ASP.NET controls.
This is a pretty broad question, and hard to address. I perceive myself in a similar space to you, so I guess I can elaborate on what I've been focusing on to improve as a developer which might be of some help.
I mostly write business and commerce related web apps, and my focus has been on a developing a solid understanding of separation of concerns, domain driven design, and enterprise design patterns.
Some books on general software design which I found revelatory were Code Complete by Steve McConnell and Head First Design Patterns by Freeman & Freeman.
I read SO, Code Better, DDD Step by Step, and a number of other blogs regularly.
Dissect well written code from others, and learn from them. Learn from your peers. If you're in a stifling work environment that doesn't give you the opportunity to grow as a developer, consider looking for a new job.
Learn a new language in a completely different framework - I've been teaching myself Ruby on Rails at home and it has given me an interesting perspective on the ASP.NET work that I do commercially.
Given that you're an ASP.NET web developer, learning MVC.NET will certainly help you to think about front-end development in a new, refreshing way.
If you can afford the money and time (or can get your company to pay for it), take a course at DevelopMentor. They have courses across the country and all year round. They are generally a week long and are in depth.

Resources