Xamarin ASP mvc 4 action with parameters not working

action, asp.net-mvc, mono, xamarin

Solution

Using newest mono(3.6.1) doesn't resolve issue. What helps is: If you're using 5.X NuGet Microsoft ASP.NET MVC package, downgrade to MVC 4 is required.

Steps:

- Uninstall following NuGet packages(order is important):

- Microsoft.AspNet.WebPages

- Microsoft.AspNet.Razor

- Microsoft.AspNet.Mvc

- Install Microsoft ASP.NET MVC 4 NuGet package.

Errors that may occur:

- The view 'Index' or its master was not found.

- Solution - change version of `System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc` in /Views/Web.Config in `factoryType` attribute of `host` node to 4.0.0.0. So line looks like this:

`<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />`

- System.InvalidOperationException Conflicting versions of ASP.NET Web Pages detected: specified version is “3.0.0.0”, but the version in bin is “2.0.0.0”. To continue, remove files from the application’s bin directory or remove the version specification in web.config.

- Solution - change `webpages:Version` to 2.0.0.0 in Root directory/Web.Config so it looks like this: `<add key=”webpages:Version” value=”2.0.0.0” />`

Then you can use parameters in controller actions.

Problem

I have these actions: ``` public class HomeController : Controller { public ActionResult Index () { ViewData ["Message"] = "Welcome to ASP.NET MVC on Mono!"; return View (); } public ActionResult Pages (string test) { ViewBag.Message = test; return View (); } } ``` The pages action is not working. I get an error 500: ``` System.TypeLoadException Could not load type 'System.Web.UnvalidatedRequestValuesBase' from assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Description: HTTP 500.Error processing request. Details: Non-web exception. Exception origin (name of application or object): System.Web.Mvc. Exception stack trace: at System.Web.Mvc.FormValueProviderFactory.GetValueProvider (System.Web.Mvc.ControllerContext controllerContext) [0x00000] in <filename unknown>:0 at System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider (System.Web.Mvc.ControllerContext controllerContext) [0x00000] in <filename unknown>:0 at System.Web.Mvc.ControllerBase.get_ValueProvider () [0x00000] in <filename unknown>:0 at System.Web.Mvc.ControllerActionInvoker.GetParameterValue (System.Web.Mvc.ControllerContext controllerContext, System.Web.Mvc.ParameterDescriptor parameterDescriptor) [0x00000] in <filename unknown>:0 at System.Web.Mvc.ControllerActionInvoker.GetParameterValues (System.Web.Mvc.ControllerContext controllerContext, System.Web.Mvc.ActionDescriptor actionDescriptor) [0x00000] in <filename unknown>:0 at System.Web.Mvc.Async.AsyncControllerActionInvoker+<>c__DisplayClass21.<BeginInvokeAction>b__19 (System.AsyncCallback asyncCallback, System.Object asyncState) [0x00000] in <filename unknown>:0 ``` If I remove the parameter from that action is working fine. Any ideas? Thanks in advance! p.s. I don't have any routes defined yet.

Original source