February 2012 - Posts - Jon Galloway

February 2012 - Posts

ZenBook UX31E - Follow up

I previously wrote about some initial impressions of a ZenBook UX31E I've been reviewing. I've been using it heavily since then and wanted to follow up on how it's been working for me.

As A Work / Development Machine

When I'm working during the day, I usually have both a multi-monitor desktop computer and one or more laptops running. I usually have 1-2 Office documents open, 2-3 copies of Visual Studio 2010, Audacity, and several dozen tabs open in Chrome. I bounce back and forth between my desktop and laptop throughout the day.

Evenings / nights / weekends I'm often doing some sort of hacking for fun, with podcast editing in the background - 2-3 copies of Visual Studio, Audacity, dozens of browser tabs. So, pretty heavy use most of the day.

This thing holds up. It's not just a cute, convenient machine, it's good enough that it's been my primary dev and work machine since I got it over a month ago. I've kept it on my desk, right next to my super-beefy Lenovo W520, so that if it every slowed me down I'd just hop over to the Lenovo. That hasn't happened, which surprises me as much as it may surprise you.This thing is really snappy as a dev machine. I've been doing web development (including ASP.NET 4 Beta) as well as Windows Phone and WPF work. It really holds up.

People have commented on my previous post that this machine's got to be underpowered because it's only got 4GB RAM, non-upgradable. I haven't found that to be an issue. The stats and overall performance on this machine are pretty decent overall:

Zenbook Windows Experience

Numbers and specs are fine, but what's really important for me is how it handles in everyday use. As I've said, I've been using this laptop a lot over the past month, and I've found it to be more than up to the task. Just to see if I've been subconsciously taking it easy on this thing, I just loaded up:

  • Two projects in Visual Studio 2010 (one WPF, one ASP.NET MVC 4 Beta)
  • Windows Phone Emulator
  • Twenty odd tabs in Chrome
  • A few tabs in IE9
  • Seesmic Desktop 2 (Silverlight) with lots of plugins and columns
  • Windows Live Writer
  • Skype
  • PowerShell console window
  • VLC (playing a 1 hour MP3)
  • Audacity (editing a 1 hour audio file)
  • PowerPoint 2010 (40 slide deck with a pretty good amount of images)
  • Windows Live Writer
  • Notepad++ (a few tabs open)

I've also got some standard background stuff running - Microsoft Security Essentials, Mesh, pretty much all the Asus stuff that came pre-installed.

And all of those apps are running smoothly. No lags, quick compiles, etc. It's responsive.

So now I was curious as to what would cause things to drag noticeably. I decided to leave all the above running and load up Inkscape, then create tiled clones until it was taking nearly 1GB memory and saturating one core (each clock image below has a lot of vector data). That finally slowed things down a bit.

Cloned Tile Explosion

The point is that, for just about any realistic day to day use, this thing work great. I really had to go out of my way to get things to slow down. If you really need workstation performance, you're probably not shopping for an ultrabook. I said in my previous introductory review that this UX31 was challenging my preconceptions about the performance I could expect out of a small form factor laptop, and that's continued to hold true over the past month. I'm convinced.

As a Technical Presentation Machine

This past month at TechReady, I presented a 75 minute talk on Mobile Development with ASP.NET MVC 4 to 120 people. It was a standard conference presentation: big stage, slides and demonstrations projected on a big screen, butterflies in stomach. I had mobile emulators running, PowerPoint going, and wrote a lot of demo code on the fly.

This, for me, is the biggest stress test for a laptop. I'm usually pretty easy going, but when I'm speaking I get really sensitive to the slightest delays or difficulties from my laptop. I get mad. If this laptop was going to disappoint me, this would have been the time.

I did all my preparation on the Zenbook, but had all the code set up on my humongous Lenovo W520 and was ready to bail out at any time. I wanted to present on this laptop, but I wasn't going to go with it if I thought I'd likely hit problems. No problems during my preparation. I took both laptops to the talk, just in case.

Everything went fine - all my demos were fast.

No problems with user input, either. When I'm presenting, I'm rushed and nervous and usually struggle with typos and trackpad foibles a lot more than in normal daily use. Not only didn't I have problems, I the keyboard worked better for me than on other laptops I've used in the past.

Everything went fine when I hooked it up to the projector. That wasn't by accident - the great video support was one of the reasons I'd requested the Zenbook UX31, as it supports resolution up to 1600x900 (best resolution of any Ultrabook, including the MacBook Air). There are two dongles included for both ethernet and standard SVGA, and they worked just fine.

As A Casual "Couch" Machine

I spend a lot of my off hours on a laptop. I'll be sitting on the couch with my wife and kids, pretending to watch movies or TV shows, but really just surfing or coding or whatever. That used to get me in trouble because I was very clearly not spending quality time with the family - as if watching TV together was quality time. But I digress.

Things lightened up as the rest of the family got tablets and Kindle Fires and other smart devices. But still, for some reason, having a giant laptop wasn't considered as socially acceptable as browsing Facebook on a discreet little tablet. Fortunately, this tiny little laptop seems to be a lot more socially acceptable. It fits in better with cute little devices. When I'm using it, people assume I'm doing light, happy, frivolous things (even if it's not the case).

I know this seems like a fluffy, non-technical thing to write in a laptop review, but it really is nice. I don't feel any social awkwardness using this on the couch or whatever. It looks like a casual device, even though I don't use it that way at all.

Travel / Mobile

This is pretty obvious, but of course this thing travels very well. It's small and lightweight, so it's easy to carry around. It's easy to take out on an airplane and just put in the seat pocket in front of me when I'm not using it. The battery easily lasts 4-6 hours, much longer in sleep mode. The charger and video/ethernet dongles are really small and travel well, too. Oh, and it feels solid enough that I don't worry about is as much as I would with a conventional laptop.

Other good features


The sound on this thing is great. It's better than any other laptop I've used. I use this laptop as a boombox while I'm jogging on the treadmill. The sound isn't just loud, it's substantial, and it's rich. I've shown it off with electronic music and classical music, and everyone I've shown has really been impressed.

Quick power up

This boots up very quickly, and resume from sleep is so fast (under two seconds) that it's essentially instant. This feels like a device, not a traditional laptop. I use it more because there's no wait to powering it on.


The keyboard seems to be a like it or hate it kind of thing. It works great for me. I've read that some people have trouble with key presses not registering, but I type pretty hard and don't have that happen at all.


I've only got a few minor criticisms, and all of them are pretty minor.

Bundleware and utilities

I mentioned this in my last review too, so I won't go into gory detail. Fresh out of the box, the Zenbook's got some simple bundleware like the Bing bar as well as a host of ASUS utilities. Some of the utilities, like the power management utilities, are worthwhile. Others like the ASUS LifeFrame application seem unlikely to be useful to most users.

I don't get too upset by these for two reasons:

  • They're easy to uninstall with PC Decrapifier
  • It's a one time hit - once the laptop's set up, it's set up

Never the less, I wish they just shipped a default Windows install and chilled out with the gadgets and utilities. I'd prefer a desktop shortcut that links to the ASUS Zenbook utility download page.

ASUS Live Update

Zenbook Update

I don't want to deal with a separate utility for driver updates. I've already got Windows Update running, and I'd like these updates to come to me that way.

What's worse, the Live Update app doesn't give feedback during some of the installs, and seemed to hang at times. I restarted it a few times because I wasn't sure if it was working.

Before I installed the recommended ASUS Live Update drivers, I had two spontaneous reboots (weeks apart). After installing the drivers, I haven't seen that happen, so I'm hoping that the drivers solved things.

Power connection

I generally like the power cord. It's pretty small, and I like the light on the charging connection which makes it both easy to find the connector in the dark and to tell if it's charging or charged.

The criticism is that it's a small right angle connector, and it's a little fragile. The laptop got bumped while the charger was plugged in, and it bent slightly. Everything still works, but it feels a little loose. All the other hardware is really solidly constructed, but this connection feels flimsy.

Keyboard lighting

This is more of a wish than a criticism, but I wish the keyboard were easier to use in the dark. It's pretty much the only MacBook Air feature I envy. My Lenovo has a ThinkLight feature, which is just an LED light above the display that shines down on keyboard when (toggled via key combination). I'd be happy if a few of the keys had lights on them. As it is, typing in a dark room is kind of tricky.

Trackpad: works on my machine

I've heard from people who have had problems with the trackpad. Apparently there are two different trackpads that ship with this laptop, and one doesn't work as well as the other. I got the Elantech Touchpad, and it's worked great for me.

Wrap up

Overall, I'm greatly impressed with this laptop. It gives me the benefits of a device with the power of a development / work machine. If I were buying another laptop today, or recommending one to a friend, it would be this one.

I'll be posting one last wrap up post in another month or two.

Disclosure of Material Connection: I received one or more of the products or services mentioned above for free in the hope that I would mention it on my blog. Regardless, I only recommend products or services I use personally and believe my readers will enjoy. I am disclosing this in accordance with the Federal Trade Commission’s 16 CFR, Part 255: “Guides Concerning the Use of Endorsements and Testimonials in Advertising

Posted by Jon Galloway | with no comments
Filed under:

Juice UI: Open source ASP.NET Web Forms components for jQuery UI widgets

This morning at MVP Summit, Scott Hunter just announced a new open source project from appendTo called Juice UI. Juice UI is a collection of Web Forms components which make it incredibly easy to leverage jQuery UI widgets in ASP.NET Web Forms applications. You can start using it right away by adding the JuiceUI NuGet package to your app, and you're welcome to go nuts with the source, which is dual licensed under MIT and GPL.

What Juice UI does

jQuery UI is a library that's built on top of jQuery. It's got a lot of great widgets for common scenarios - things like date pickers, dialogs, and tabs - and they're all built on a really solid widget platform from some of the sharpest Javascript developers in the field. You've always been able to make use of these libraries using jQuery and jQuery UI, but the new Juice UI controls make it that much easier.


<asp:TextBox runat="server" ID="_Restrict" />
    MaxDate="+1M +10D" />

Gives you this:

2012-02-28 09h16_03

Included controls and behaviors

Juice UI is launching with 14 widgets and behaviors. You can see the whole list of controls at http://juiceui.com/controls, and they've all got interactive examples.

2012-02-28 09h17_29

Here's the full list, linked to the documentation:


Add the JuiceUI NuGet package

I'm going to start with a new ASP.NET 4 Web Forms project. I'll right click on the References folder, select Manage NuGet Packages..., and search for "juiceui"

2012-02-28 08h10_11

The JuiceUI namespace

The NuGet package adds the JuiceUI namespace to my web.config, like this:

    <compilation debug="true" targetFramework="4.0" />
        <add assembly="JuiceUI" namespace="Juice" tagPrefix="juice" />

If needed, I remove that and use the <@Import Namespace="JuiceUI" /> directive to bring that namespace at the page level.

Using the Juice UI controls

You'll first need an <asp:ScriptManager> - you can add one to a page, or you can add one to your site's Master page.

<asp:ScriptManager id="_Script" runat="server" />

Now I can just start using the controls. These are extender controls, so you use the TargetControlID property to point the Juice UI behavior at an Web Forms server control. Here's a stripped down example that hooks up a DatePicker behavior to a TextBox:

<asp:TextBox runat="server" ID="DateSample" />
<Juice:Datepicker runat="server" TargetControlID="DateSample" />

And just because it's fun, I'll add a Draggable behavior that's pointed at a Panel:

<asp:Panel runat="server" ID="DragBox" Style="border:1px solid; width:100px;">
        Hi. You can drag me around.
<Juice:Draggable runat="server" TargetControlID="DragBox" />

Note: I'm keeping this really simple for illustration here - of course the style would go in CSS, etc. There are more sophisticated examples in the Juice UI samples included with the source code.

Running this page shows I've got just what you'd expect - a date picker on the textbox, and a draggable panel.

2012-02-28 10h34_32

Here's the complete markup for that page:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="Juice_Sample._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">

    <asp:ScriptManager id="_Script" runat="server" />

    <asp:TextBox runat="server" ID="DateSample" />
    <Juice:Datepicker runat="server" TargetControlID="DateSample" />

    <asp:Panel runat="server" ID="DragBox" Style="border:1px solid; width:100px;">
        Hi. You can drag me around.
    <Juice:Draggable runat="server" TargetControlID="DragBox" />


And, in case you're interested, the widgets are hooked up using HTML5 data- attributes:

<input name="ctl00$MainContent$DateSample" type="text" 
        data-ui-widget="datepicker" />

<div id="MainContent_DragBox" 
        style="border:1px solid; width:100px;">
    Hi. You can drag me around.

This seems familiar...

It's a very similar experience to the Ajax Control Toolkit, but using jQuery UI as an underpinning. That is, create Web Forms extender and script controls for all the widgets and effects in jQuery UI. Don't read anything into this - work is still continuing on Ajax Control Toolkit (in fact, there have been quite a few updates lately). The ASP.NET team's long term direction for client side scripting is jQuery, though, and Juice UI helps you to integrate with that really easily.

Finding out more

The best place to find out more about Juice UI is on the Juice UI site, which has interactive examples and documentation.

The source (including a sample project) is in the GitHub repository.

I'd recommend getting help either on StackOverflow (using the juiceui tag) or in the ASP.NET jQuery forum.

ASP.NET MVC 4 Beta Released!

Last September at //BUILD/ we announced ASP.NET MVC 4 Developer Preview. Today we're releasing the next release on the road to ASP.NET MVC 4, ASP.NET MVC 4 Beta. This release includes some great new features since the ASP.NET MVC 4 Developer Preview, including the introduction of ASP.NET Web API.

You can get all the info on ASP.NET MVC 4 at http://asp.net/mvc/mvc4

Here's an overview of what's new, and a quick reminder of some of the top features in ASP.NET MVC 4 in general.


The big new feature since the Developer Preview is the introduction of ASP.NET Web API.

2012-02-16 13h48_04

ASP.NET Web API started out as WCF Web API. I've personally been a big fan of Web API - you may have seen my earlier post, WCF MediaTypeProcessor + Speech API = SpeechProcessor fun. I'm excited to see these merge together, as this brings a lot of power to Web API, unites programming models and removes the burden of having to choose between the two.

Why use ASP.NET Web API?

ASP.NET MVC was designed primarily for interacting with humans via web pages. The main use case is emitting HTML and responding to user input (submitting forms, clicking links, etc.). It does a great job at that.

ASP.NET Web API is built for all the other, non-human interactions your site or service needs to support. Think about jQuery code that's making an Ajax request, or a service interface that supports a mobile client. In these cases, the requests are coming from code and expect some kind of structured data and specific HTTP Status Codes.

These two are very complimentary, but different enough that trying to build out HTTP services using ASP.NET MVC took a lot of work to get right. The inclusion of ASP.NET Web API in ASP.NET MVC (and availability elsewhere, including ASP.NET Web Pages) means that you can build top-notch HTTP services in an ASP.NET MVC application, taking advantage of a common base and using the same underlying paradigms. I'm going to quote the release notes (normally something I'd frown on, but since I helped post them I'm going to quote them):

ASP.NET Web API includes support for the following features:

  • Modern HTTP programming model: Directly access and manipulate HTTP requests and responses in your Web APIs using a new, strongly typed HTTP object model. The same programming model and HTTP pipeline is symmetrically available on the client through the new HttpClient type.
  • Full support for routes: Web APIs now support the full set of route capabilities that have always been a part of the Web stack, including route parameters and constraints. Additionally, mapping to actions has full support for conventions, so you no longer need to apply attributes such as [HttpPost] to your classes and methods.
  • Content negotiation: The client and server can work together to determine the right format for data being returned from an API. We provide default support for XML, JSON, and Form URL-encoded formats, and you can extend this support by adding your own formatters, or even replace the default content negotiation strategy.
  • Model binding and validation: Model binders provide an easy way to extract data from various parts of an HTTP request and convert those message parts into .NET objects which can be used by the Web API actions.
  • Filters: Web APIs now supports filters, including well-known filters such as the [Authorize] attribute. You can author and plug in your own filters for actions, authorization and exception handling.
  • Query composition: By simply returning IQueryable<T>, your Web API will support querying via the OData URL conventions.
  • Improved testability of HTTP details: Rather than setting HTTP details in static context objects, Web API actions can now work with instances of HttpRequestMessage and HttpResponseMessage. Generic versions of these objects also exist to let you work with your custom types in addition to the HTTP types.
  • Improved Inversion of Control (IoC) via DependencyResolver: Web API now uses the service locator pattern implemented by MVC’s dependency resolver to obtain instances for many different facilities.
  • Code-based configuration: Web API configuration is accomplished solely through code, leaving your config files clean.
  • Self-host: Web APIs can be hosted in your own process in addition to IIS while still using the full power of routes and other features of Web API.

That's a lot of good stuff. I'm going to highlight a few of my favorites.

Full Support For Routes

If you're used to the routing features in ASP.NET, you'll feel right at home with ASP.NET Web API. The routes are defined right where you'd expect in Global.asax. Here's how they look in an ASP.NET MVC application:

    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }

One small difference you may have noticed - since ASP.NET Web API is built around the standard HTTP methods, there's no need for an Action - those are inferred from the HTTP Method.

So when you create a new ApiController, it looks like this:

public class ValuesController : ApiController
    // GET /api/values
    public IEnumerable<string> Get()
        return new string[] { "value1", "value2" };

    // GET /api/values/5
    public string Get(int id)
        return "value";

    // POST /api/values
    public void Post(string value)

    // PUT /api/values/5
    public void Put(int id, string value)

    // DELETE /api/values/5
    public void Delete(int id)

A GET request maps to the Get action, and you don't need to map that anywhere. If found that really easy to work with, and it pushes you to do the right thing as far as building services around the correct HTTP verbs.

Model Binding

Model binding is a powerful feature in ASP.NET MVC (and on its way to Web Forms in ASP.NET 4.5 too). It allows you to write a method that accepts your custom object type as a parameter, and ASP.NET Web API handles mapping posted data to that parameter. It lets you focus on implementing your specifications and get out of the business of mindless (and error prone) mapping code. Here's an example, showing how a method that accepts posted data can focus on the logic of handling the data:

public HttpResponseMessage<comment> PostComment(Comment comment) 
    comment = repository.Add(comment);
    var response = new HttpResponseMessage<comment>(comment, HttpStatusCode.Created);
    response.Headers.Location = new Uri(Request.RequestUri, "/api/comments/" + comment.ID.ToString());
    return response;


Filters are a really powerful feature in ASP.NET MVC. You can use attributes to apply pre/post logic to action methods, entire controllers, or globally to all action methods. They're available in ASP.NET Web API as well, and you use the same kind of logic to both build and apply them. I worked with a sample that applied some custom attribute based validation using a global action filter, and found it really to apply my ASP.NET MVC background.

Content Negotiation

Content Negotiation is the process by which clients (e.g. your web browser) and servers decide on content formats. Clients send accept headers which tell the server what content type they prefer - XML, JSON, VCard, iCal, image, audio, custom formats, etc. - and the server supplies the best fit for each client's requested formats automatically. This actually happens all the time, on each page you request, without you knowing or caring about it.

ASP.NET Web API has this built in, so a simple one line Web API action method will return either XML or JSON depending on what the client requests, without your needing to do anything to support it. I wrote about the general idea in detail in my WCF MediaTypeProcessor + Speech API = SpeechProcessor fun example, which showed returning audio data if the client supports it. The API's changed, but the concept is the same, because it's built on standard content negotiation standards.

ASP.NET Web API Content

There's a lot more to say about ASP.NET Web API, so we've built out a new ASP.NET Web API content area on the ASP.NET site which includes some documentation and an introductory screencast series.

You can see a full presentation on ASP.NET Web API from Daniel Roth (PM for ASP.NET MVC and ASP.NET Web API) at last week's C4MVC meeting here:

Bundling by default

Another new very useful feature since the developer preview is the use of Bundling in the ASP.NET project templates. The <head> section of the _Layout.cshtml in a new ASP.NET MVC 4 Beta project looks like this now:

    <meta charset="utf-8" />
    <title>@ViewBag.Title - My ASP.NET MVC Application</title>
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
    <link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Content/css")" rel="stylesheet" type="text/css" />
    <link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Content/themes/base/css")" rel="stylesheet" type="text/css" />
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Scripts/js")"></script>
    <meta name="viewport" content="width=device-width" />

There's no need to call out each individual script or CSS file, because the referenced scripts are all automatically bundled and minified.

One nice advantage of this that may not be immediately obvious is that this removes the hardcoded JavaScript references from the templates. For example, in the past, updating jQuery in an ASP.NET MVC application was a two step process:

  1. Grab the latest jQuery version from NuGet
  2. Search through my views for hardcoded references to the old jQuery version and update them to the new version

Now that bundling is handling scripts in the /Scripts folder, that second step is automatic.

Razor Enhancements

There are few nice enhancements to Razor (so they'll work in ASP.NET Web Pages 2 as well) that simplify some common scenarios.

URL Resolution - Support for ~/ syntax

Instead of writing this:

<script src="@Url.Content("~/Scripts/Site.js")"></script>

You can now write this:

<script src="~/Scripts/Site.js"></script>

Razor understands the ~/ syntax and automatically resolves it with all standard HTML attributes.

Conditional attribute rendering

If you have an attribute that might be null, in the past you've needed to do a null check to avoid writing out an empty attribute, like this:

<div @{if (myClass != null) { <text>class="@myClass"</text> } }>Content</div>

Now Razor is able to handle that automatically, so you can just write out the attribute. If it's null, the attribute isn't written:

<div class="@myClass">Content</div>

So if @myClass is null, the output is just this:


Again, this is a Razor feature, so it's shared with ASP.NET Web Pages 2.

NuGet Based Project Installation

When you create a new ASP.NET MVC 4 project, you'll notice that a bunch of NuGet packages are being installed. That's because the project template heavily leverages the NuGet package restore feature - in fact, even ASP.NET MVC 4 is a NuGet package.

2012-02-16 16h05_20

ASP.NET MVC installation has been taking increasing advantage of including NuGet pagkages in Visual Studio templates with each release, and while the AspNetMvc package actually came out with the ASP.NET MVC 4 Developer Preview, the Beta buys into it even more.

This makes it easy to take advantage of the NuGet Package Restore feature, which enables you to leverage NuGet without having to commit your binary dependencies to source control.

Software Requirements and Installation

The ASP.NET MVC 4 components for Visual Studio require PowerShell 2.0 and either Visual Studio 2010 with Service Pack 1 or Visual Web Developer Express 2010 with Service Pack 1. The ASP.NET MVC 4 Beta doesn't work with the Developer Previews of Visual Studio 11 or .NET 4.5. Stand by for those.

ASP.NET MVC 4 Beta runs side by side with previous versions of ASP.NET MVC. It's a pretty lightweight install - I've installed and uninstalled it lots of times without any impact on my other ASP.NET projects or Visual Studio in general.

You can install ASP.NET MVC 4 via Web PI or using the standalone installer executable - both are available at http://www.asp.net/mvc/mvc4

In the EULA (found at %ProgramFiles(x86)%\Microsoft ASP.NET\ASP.NET MVC 4\eula.rtf after install), you'll see that section 1a includes a Go Live license providing you meet the terms listed. I am not a lawyer, I am not a dentist, read the EULA, etc., but it does include this text: "If you comply with the rest of these license terms, you may also distribute to third parties or deploy for third parties to access over the Internet the ASP.NET programs that you develop using the software, provided that..."

Update: Where to learn more about ASP.NET MVC 4 and ASP.NET Web API

ASP.NET Site Content


The best way to keep up with upcoming ASP.NET releases is at http://asp.net/vnext - that's where we put all the videos, links to new tutorials, and information about downloads. If you just remember one URL, that's the one.


We've started offering a dedicated page for each new ASP.NET MVC version. In addition to the installers and top links, they have some nice bullet points you can send to your boss to convince them to let you upgrade. :-)


There's a lot of ASP.NET Web API specific content, including tutorials and a six part screencast series there. It's also got a link to the ASP.NET Web API Forum, the best place to get questions answered by the ASP.NET Web API team.

Scott Guthrie presentation on ASP.NET MVC 4 at TechDays

Scott Guthrie announced ASP.NET MVC 4 at TechDays 2012 in the Netherlands. The video's now up on Channel 9.

Herding Code: Brad Wilson on ASP.NET MVC 4

I interviewed Brad Wilson (member of the ASP.NET team and co-author of Wrox Professional ASP.NET MVC 3) for the Herding Code podcast.

Download / Listen:

Herding Code 134: Brad Wilson on ASP.NET 4 Beta and ASP.NET Web API

Feedback and Help

While I'm always happy for blog comments, there are better places to go to leave feedback or get help.

To get help (often directly from the ASP.NET team), you can use the forums:

The best way to report bugs is via Connect. Honest, these route right into the team's bug database.

The best place for suggestions (not bugs) is on the ASP.NET MVC UserVoice page. While it's probably late in the cycle to get big suggestions into ASP.NET 4, it's great time to start shaping the next version ASP.NET MVC.

More Posts