ASP.NET MVC Release Candidate

asp.net mvc, asp.net 0 comments suggest edit

At long last I am happy, relieved, excited to announce the release candidate for ASP.NET MVC. Feel free to go download it now. I’ll wait right here patiently.

There have been a lot of improvements made since the Beta release so be sure to read the release notes. I’ve tried very hard to be thorough in the notes so do let me know if anything is lacking. We are also pushing new tutorials up to the ASP.NET MVC Website as I write this.

Also, don’t miss ScottGu’s usual epic blog post describing the many improvements. There’s also a post on the Web Tools team blog covering tooling aspects of this release in detail. As I mentioned when we released the Beta, we didn’t have plans for many new features in the runtime, but we did have a lot of tooling improvements to add. I’ve already described some of these changes in a previous blog post, as did ScottGu in his detailed look.

Our goal with this release was to fix all outstanding bugs which we felt were real showstoppers and try to address specific customer concerns. We worked hard to add a bit of spit and polish to this release.

Unfortunately, a few minor bugs did crop up at the last second, but we decided we could continue with this RC and fix the bugs afterwards as the impact appear to be relatively small and they all have workarounds. I wrote about one particular bug so that you’re aware of it.

For now, I want to share a few highlights. This is not an exhaustive list at all. For that, check out Scott’s post and the release notes.

Ajax

Yes, I do know that jQuery released a new version (1.3.1), and no, it is not in this release. :) We just didn’t have time to include it due to the timing of its release. However, we are performing due diligence right now and plan to include it with the RTM.

We did make some changes to our Ajax helpers to recognize the standard X-Requested-With HTTP header used by the major JavaScript libraries such as Prototype.js, jQuery, and Dojo. Thus the IsMvcAjaxRequest method was renamed to IsAjaxRequest and looks for this header rather than our custom one.

ControllerContext

ControllerContext no longer inherits from RequestContext, which will improve testing and extensibility scenarios. We would have liked to make changes to RequestContext, but it was introduced as part of the .NET Framework in ASP.NET 3.5 SP1. Thus we can’t change it in our out-of-band release.

Anti Forgery Helpers

These helpers were previously released in our “futures” assembly, but we’ve fixed a few bugs and moved them into the core ASP.NET MVC assembly.

These are helpers which help mitigate Cross-Site Request Forgery (CSRF) attacks. For a great description of these helpers, check out Steve Sanderson’s blog post on the topic.

MVC Futures

I added a couple of expression based helpers to the ASP.NET MVC futures assembly, Microsoft.Web.Mvc.dll. These are just samples to demonstrate how one could write such helpers. I’ll add a few more by the time we ship the RTM. Note, if you’re using the old futures assembly, it won’t work with the new RC. You’ll need to update to the new Futures assembly.

In case you missed it the first time,click here for the Download.

Found a typo or error? Suggest an edit! If accepted, your contribution is listed automatically here.

Comments

avatar

49 responses

  1. Avatar for Mads Kristensen
    Mads Kristensen January 27th, 2009

    The news I've been waiting for for a long time. Thanks. Now I can finally start converting some of my sites to the MVC framework. I wanted to wait for the RC so I didn't have to rewrite too much when the final release shipped.

  2. Avatar for Chad Moran
    Chad Moran January 27th, 2009

    Thanks for your guys' hard work, love it!

  3. Avatar for huey
    huey January 27th, 2009

    Thanks to the ASP.NET MVC team for so much community interaction. It is a great project.

  4. Avatar for Arturo
    Arturo January 27th, 2009

    Thank you very much!!!
    Muchas gracias!!!

  5. Avatar for Duncan Goodall
    Duncan Goodall January 27th, 2009

    awesome work, well done asp.net team. I'm sure you guys are so happy that MVC has finally made release candidate.
    I think you made the right decision go ahead, I know you guys will document any issues and the fixes. Look forward to more.

  6. Avatar for Simone Chiaretta
    Simone Chiaretta January 27th, 2009

    Awesome... this is the news I've been waiting for since a few weeks :)
    Simo

  7. Avatar for q
    q January 27th, 2009

    we got mvc!
    we got mvc!!
    we got mvc!!!
    Thanks Phil

  8. Avatar for Phil C
    Phil C January 27th, 2009

    WOOOOO HOOOOOOO!
    This is a most excellent day!
    To the download, Robin!
    Thanks for all the hard work Phil!
    -pc

  9. Avatar for PK
    PK January 27th, 2009

    3 Cheers to the ASP.NET MVC krew @ MS :)
    <3

  10. Avatar for Gavin Joyce
    Gavin Joyce January 27th, 2009

    Congratulations and thanks! I'm looking forward to rewriting DotNetKicks.com using MVC goodness.

  11. Avatar for Santos Ray Victorero, II
    Santos Ray Victorero, II January 27th, 2009

    Congratulations!
    Thanks,
    Santos

  12. Avatar for Lamin Barrow
    Lamin Barrow January 27th, 2009

    WOW.. I felt really obliged to comment here. I am just very very happy to here that. Hopefully i will create a template for the design Gallery to show my appreciation. Thank you. :D

  13. Avatar for Andrew Nurse
    Andrew Nurse January 27th, 2009

    Yay! Looking forward to checking out the new stuff

  14. Avatar for Sean M
    Sean M January 27th, 2009

    Hey Phil,
    Another bug I've found is the change to the helpers with regards to generating urls.
    I must be the only person who actually still uses asp.net web controls within my views (I bind data from my Model to controls via Page_Load)
    Now I have a massive problem because the Url.Action / Url.Content methods return relative paths (they include ../ etc into pages, abd web control hyperlinks like to embed the path to the current view to the url as well, so now I get controls with a NavigateUrl of say /Views/Home/../Home/About, and the runtime shits itself about using .. in paths
    Does no one else use the asp:HyperLink control anymore?
    I can post a very succinct example of the failure:
    http://www.arcturus.com.au/mvc/Index.aspx.txt
    gives an example of it appending the path to the view + the url to the action
    For the time being I'm using ResolveUrl rather than Url.Action

  15. Avatar for Danny
    Danny January 27th, 2009

    Phil,
    One word says it all. THANKS !

  16. Avatar for SoftMind
    SoftMind January 27th, 2009

    Hi Phil,
    Great News shared.
    I am dying to work with IronRuby and Asp.Net MVC since ages, but no good news are seen nearby.
    Can you kindly make it clear for once and all that should i leave all the hopes to work with IronRuby and Asp.Net MVC or i can still keep on dreaming with this.
    No news are bad news.. and thats really frustrating.
    Thanks

  17. Avatar for Adam Cooper
    Adam Cooper January 27th, 2009

    Hi Phil,
    Congratulations on the release candidate. The improvements look great.
    For MVC Beta, I was using ModelState.AddModelError and ModelState.SetAttemptedValue, but the RC contains no SetAttemptedValue method. Instead, there is a similarly named method (I think it's SetModelValue or SetValue) that uses a ValueProviderResult in place of a simple string value. I thought the new RC API was pretty straightforward, but the method calls I ended up with seemed pretty wieldy and I wondered if perhaps I was missing something. Any guidance as to how to use the new RC API for adding errors and attempted values to model state?
    Thanks much,
    Adam

  18. Avatar for Simon
    Simon January 27th, 2009

    awesome work. first time i've EVER been excited reading release notes. i recommend anybody that hasn't to read them. and its not that i've been waiting for features for months - i started MVC 6 days ago. its just testament to the skill of your team and attention to detail for complex issues. i find myself saying 'wow thats great' far more than usual.
    First impressions:
    I don't like the new method 'File' in Mvc.Controller. It conflicts with System.IO.File name, and is confusing becasue one is a class and the other is a method. I'm sure theres a better name for it that really describes what it does. 'File' is not very discoverable or a good indication of what it does.
    Its great that 'Add View' doesn't ALWAYS add a codebehind file anymore. But how about an checkbox in the 'Add view' dialog to create one if I need it. I often like to write helpers to create my view. I understand exactly why it was removed (and originally why it was needed) but I want it back! PLEASE!!! I couldn't immediately see an easy way to add a codebehind file after the fact (apart from shift dragging a different file and then manually adding the correct inherits attribute - yuk).
    Html.ValidationMessage(string modelName) has a slightly confusing name (the modelName parameter). How about changing the parameter name to 'modelPropertyName or 'propertyName' or 'fieldName'. When I first saw 'modelName' I'm thinking 'what! they want the name of my model class???'

  19. Avatar for Dave
    Dave January 27th, 2009

    I'm having an issue with Ajax.BeginForm after upgrading a MVC Beta site to a RC1 site.
    <% using (Ajax.BeginForm("Contact", "Home", new AjaxOptions { UpdateTargetId = "contact_modal", OnSuccess = "registerEvents", LoadingElementId = "contact_ajaxicon" }))
    { %>
    The form using this tag works on the first ajax submission, but not on the second - using the mvc ajax debug file, I've confirmed that it's getting a 404 error - the first time it's correctly pointing to "Home/Contact", but on the second it points to just "Contact". This was working perfectly (and on many forms like this one) in the Beta version.
    My eyes are glazing over looking at this - any ideas?
    Thanks!

  20. Avatar for Simon
    Simon January 27th, 2009

    VERY VERY relieved here to see that jQuery 1.3.1 was NOT included in this version.
    Theres a critical bug in 1.3.1 that I found -- the reporting of which I outsourced via stackoverflow.
    In short $(function() { alert('Ready'); } does NOT execute when the DOM is loaded (as it should), but only executes when all images on the page are complete. This is an IE only issue which will lead to some pretty lousy responsiveness and probable race conditions from applications that have lots of images.
    You'll want to at very least wait for a fix for this issue - and make a very thorough 'due diligence' decision as to whether or not to move to 1.3.x for RTM. I'm not sure what the jQuery community's overall reception has been of this release - but surprisingly they still have it posted as the recent version.
    Here's more details including a link to the jQuery bug tracker and a test page for the bug:
    stackoverflow.com/.../jquery-is-waiting-for-ima...

  21. Avatar for PaulBlamire
    PaulBlamire January 27th, 2009

    Hi Phil, awsum news! Please let your team know that all their hard work is appreciated :-)

  22. Avatar for Boris Callens
    Boris Callens January 27th, 2009

    - What a glorious day!
    Isn't it a glorious day mister sun?
    - It's always a nice day with two scoops of raisins, Peter.

  23. Avatar for Colin Newell
    Colin Newell January 27th, 2009

    Awesome. Thanks. I've upgraded and it was reasonably painless.
    Moving the AntiForgery token into the release was especially cool. I do have one question though, will you add a way to set the path of the cookie that it sets? If I have a live and test site in two separate virtual directories the cookies look like they will clash.

  24. Avatar for Eric
    Eric January 27th, 2009

    Very nice :). Great release notes thanks !!
    Are there good clear examples out there for the IModelBinder implementation ? Looks very interesting from what I saw in the notes, but haven't played around with that yet.

  25. Avatar for Khaja Minhajuddin
    Khaja Minhajuddin January 27th, 2009

    Wooooooooohoooooooo!
    I am very excited, we finally have a Release Candidate!

  26. Avatar for dario-g
    dario-g January 27th, 2009

    Hi, great stuff. Beta uninstalled and RC installed and... projest doesn't compile. Why FilePathResult within controller was named File??? File is the name of very often used class from System.IO!!! :(

  27. Avatar for Bill Gerold
    Bill Gerold January 27th, 2009

    Great Work, I feel production release can't be far behind.
    I am having issues with the DropDownList now.
    I Use dropdowns extensively through out my application adn made various helpers that return a SelectList with an Item selected.
    I use the following call
    <%=Html.DropDownList("WellST",Html.StateSelectList(ViewData.Model.WellST), New With {.class = "ddl_Class"})%>
    Which worked perfectly
    With the new build however I get Overload resolution failed because no accessible 'DropDownList' can be called without narrowing conversion
    Any ideas?

  28. Avatar for Nicolas
    Nicolas January 27th, 2009

    Url.RouteUrl is broken. It returns a blank string for routes that used to work before. It seems that this is the case when targetting routes from another controller than the one which triggered the view. A major issue... all my site is broken.

  29. Avatar for Sigurdur G. Gunnarsson
    Sigurdur G. Gunnarsson January 27th, 2009

    Great release, but I've immediately run into a problem while upgrading an application over from the beta.
    This application has a WYSIWYG HTML editor, and I can't post the page anymore.
    Error I get is: "A potentially dangerous Request.Form value was detected from the client"
    And yes, Ive put validateRequest="false" in the web.config like instructed in the release notes and even tried it in the Page declaration. It doesn't seem to turn off!
    For me this is a showstopper :(

  30. Avatar for Dale Weaver
    Dale Weaver January 27th, 2009

    I think there is a bug with UpdateModel(<TModel>). I'm following the tutorial at http://www.asp.net/learn/mvc/tutorial-01-vb.aspx. My code looks like this:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(FormCollection collection)
    {
    var newMovie = new Movie();
    try
    {
    var newMovie = new Movie();
    UpdateModel(newMovie, collection.ToValueProvider());
    _db.AddToMovies(newMovie);
    _db.SaveChanges();
    return RedirectToAction("Index");
    }
    catch
    {
    return View();
    }
    }
    In the database all fields don't allow null values. But when I fill out the insert form in asp.net mvc and leave all fields blank and click submit, no errors are thrown on string fields and empty strings are inserted into the database. Date/Time fields throw validation errors but not string fields.

  31. Avatar for achu
    achu January 27th, 2009

    i swtiched to asp.net mvc yesterday onwards. i think microsoft ajax is super easy now. one thing i noticed in the beta is Built in model binder automatically assign prefix as the name of parameter. why not assign default prefix as empty.
    thanks for the great product.

  32. Avatar for dario-g
    dario-g January 27th, 2009

    There's more bugs :( Bugs for me and like I see for others too becouse with MVC Beta 'everything' work fine.
    Eg:
    - Url.Action("About") returns "About" not "Home/About"
    - The same Html.BeginForm
    - I have few methods in MasterPage code behind, compiles but in runtime throws exception MethodNotFound
    - validateRequest=false not worked for me, too
    - Url.RouteUrl not worked for me, too
    - Where is Cancel property in AuthorizationContext?
    - What happed with public virtual method GetListItems in SelectList?
    Please, help :/

  33. Avatar for haacked
    haacked January 27th, 2009

    @dario-g did you read the release notes about upgrading existing projects? The Action method now renders relative paths. When you click on the link rendered, does it not work?
    @Dave, Could you post a repro to the Forums?

  34. Avatar for Dave
    Dave January 27th, 2009

    Phil - I started this thread here, which you answered - I realized after I posted here that I probably shouldn't have used your blog post for a support forum.
    forums.asp.net/p/1376650/2898567.aspx#2898567
    Essentially I rolled back to Beta for now - if there's a good workaround that you would recommend in the meantime (there's one on the forum thread linked to above, but I haven't tried it yet), I'll do that and wait for the full release in a month or so.
    Thanks again!

  35. Avatar for Steve
    Steve January 28th, 2009

    Hey Phil, I love the new RC1.
    Question:
    I separate my controllers out into their own assembly.
    This renders some of the cool features, apparently unusable for me.
    Is there a way to tell the project where my controllers are so I can take advantage of the new features (like goto controller)

  36. Avatar for Jirapong Nanta
    Jirapong Nanta January 28th, 2009

    Thank you, and cheer up.
    Note that,

    I get an error while installing the VS.NET Template process, after click 'ok', Visual Studio automatic start up
  37. Avatar for Piers
    Piers January 28th, 2009

    I've already updated my RESTful web serviceexample based on MVC. The update was easy thanks to the comprehensive realse notes:
    shouldersofgiants.co.uk/.../...edness-to-JSON.aspx

  38. Avatar for Andy
    Andy January 28th, 2009

    Can we can using patterns for actionlinks? <% using (Html.ActionLink(null, "ViewProduct", "Products") { %><img .... /><% } %></div>

  39. Avatar for Gergely Orosz
    Gergely Orosz January 28th, 2009

    I like the helpers you added to prevent cross site scripting attacks. Good job!

  40. Avatar for Jeff
    Jeff January 28th, 2009

    Would be great if you guys could display a date next to the tutorials and videos on www.asp.net/mvc so people know which ones are the newest. I see the "NEW" icon but it's kind of ambiguous - a date would clear it up nicely.

  41. Avatar for secretGeek
    secretGeek January 29th, 2009

    This is fantastic work Phil.
    I printed out the gu's description of all the changes and read it on the bus last night.
    Everything you guys have done for the RC is just golden!
    I am just itching to deliver some MVC goodness to someone. You deserve all the praise you can handle.

  42. Avatar for George Mauer
    George Mauer January 29th, 2009

    Problem installing it contact vendor blah blah blah. I submitted the error report but now I don't have MVC Beta or RC1...boo

  43. Avatar for Andrej Gaevskij
    Andrej Gaevskij February 1st, 2009

    Thanks for great release, Phil & Co. :)
    @Sigurdur G. Gunnarsson use [ValidateInput(false)]

  44. Avatar for Tombob
    Tombob February 17th, 2009

    Regarding below post, I had the same issue albeit I wqas using a jquery json call. I found if I used the javascript escape function on my input it solved the issue.

    Great release, but I've immediately run into a problem while upgrading an application over from the beta.
    This application has a WYSIWYG HTML editor, and I can't post the page anymore.
    Error I get is: "A potentially dangerous Request.Form value was detected from the client"
    And yes, Ive put validateRequest="false" in the web.config like instructed in the release notes and even tried it in the Page declaration. It doesn't seem to turn off!
    For me this is a showstopper :(

  45. Avatar for haacked
    haacked February 17th, 2009

    @Tombob Unfortunately, putting it in the Page is way too late. Your controller logic already ran.
    So you need to put the [ValidateRequest(false)] attribute on the Controller action in order to turn it off for that action.

  46. Avatar for Paul Mungai
    Paul Mungai February 18th, 2009

    Hi Phil,
    Great work! I appreciate.
    One question; what happened to BinaryStreamResult that was part of Futures Beta? I just upgraded to Futures RC1 and my code has broken :-(
    Thanks!

  47. Avatar for VB Helper
    VB Helper April 3rd, 2009

    Hi,
    What is the VB version of this one?
    <% using (Ajax.BeginForm("Contact", "Home", new AjaxOptions { UpdateTargetId = "contact_modal", OnSuccess = "registerEvents", LoadingElementId = "contact_ajaxicon" }))
    { %>
    Dave ask about this above (not the vb version), but seems like ajaxing a form won't do. :(

    cheers,

  48. Avatar for Bellaplex
    Bellaplex March 18th, 2010

    ASP.NET can be used to make the Internet appear dynamical, faster and much more effective.

  49. Avatar for marco
    marco October 5th, 2010

    I like the way the controller instantiates and wraps the descendant stuff.