views:

862

answers:

1

I converted my project from MVC 1 to MVC 2 and Visual Studio 2008 gives me the following error:

Error   1   'System.Web.Mvc.MvcHtmlString' does not contain a definition for 'Substring' and no extension method 'Substring' accepting a first argument of type 'System.Web.Mvc.MvcHtmlString' could be found (are you missing a using directive or an assembly reference?) C:\Dev\SapientFansite\SapientFansiteApplication\SapientFansiteWeb\Code\ExtensionMethods\Html.cs 68  75  SapientDevelopment.SapientFansite.Web

Here is the code the error is pointing to. It is specifically having trouble with the "linkHtml.Substring(0, 2)".

     var linkHtml = htmlHelper.ActionLink(linkText, actionName, controllerName);
     if (isActiveMenuItem) {
        linkHtml = string.Format("{0} class=\"active\" {1}", linkHtml.Substring(0, 2), linkHtml.Substring(3));
     }
     return linkHtml;
     }

I suspect that it has something to do with a missing reference or something but I'm at a loss.

Thank you,

Aaron

+5  A: 

Html.ActionLink() does no longer return a string. It now returns a MvcHtmlString. A MvcHtmlString does not have a method called .Substring() (only string does). If you call .ToString() or .ToHtmlString() (will encode the value) then you will be able to call .Substring(). See this link.

Mattias Jakobsson
Thank you, this did the trick. It seems ActionLink pulled a fast one on me. :)
Aaron Salazar