views:

257

answers:

2

I've seen a few examples of people using this syntax for HTML.BeginForm:

(Html.BeginForm<Type>(action => action.ActionName(id)))

But when I try this syntax all I get is a:

The non-generic method System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper)'
cannot be used with type arguments

What am I missing? Visual Studio 2010, System.Web.MVC version is v2.0.50727

A: 

Here is an example, in your .aspx view:

"UserController" being your controller.
"Save()" being your action method in the controller.

<%
using (Html.BeginForm<UserController>(x => x.Save(null, null, Model.User.ID, null, null), FormMethod.Post, new { id = "formUser" })) {
%>
   <%= Html.AntiForgeryToken() %>
   <%: Html.ValidationSummary(true) %>
   ...
<% } %>

Hope that helps.

GONeale
It's complaining because BeginForm doesn't have that signature. "cannot be used with type arguments"
itchi
+3  A: 

You will find this extension methods in MVCContrib and more specifically in the Microsoft.Web.Mvc.dll assembly in the Microsoft.Web.Mvc.FormExtensions class. So download and include this assembly in your project and add the Microsoft.Web.Mvc namespace in the namespaces section of your web.config file:

<namespaces>
    <add namespace="System.Web.Mvc"/>
    <add namespace="System.Web.Mvc.Ajax"/>
    <add namespace="System.Web.Mvc.Html"/>
    <add namespace="System.Web.Routing"/>
    <add namespace="System.Linq"/>
    <add namespace="System.Collections.Generic"/>
    <add namespace="Microsoft.Web.Mvc"/>
</namespaces>

and you will be able to use it in your views.

Darin Dimitrov
Yeah, I think this is along the right tracks. However, I add the reference and add the namespace and still get this error. Is it just MVCContrib I need or also MVCFutures?
itchi
Yeah, the futures worked. http://aspnet.codeplex.com/releases/view/41742
itchi