问题
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.
回答1:
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 infactoryType
attribute ofhost
node to 4.0.0.0. So line looks like this:
- Solution - change version of
<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” />
- Solution - change
Then you can use parameters in controller actions.
回答2:
This is embarrassing, but here is my workaround until Mono updates System.Web:
public ActionResult Index() //string app_id, string session_id, int surah_id, int ayat_id)
{
string app_id = Request["app_id"];
string session_id = Request["session_id"];
int surah_id = Int32.Parse(Request["surah_id"]);
int ayat_id = Int32.Parse(Request["ayat_id"]);
// ...
}
回答3:
I got the same error as OP in my MVC
-project. (Currently using Xamarin
on a Mac
) I'm using Microsoft Exchange WebServices, and I found out that downgrading this package solved my problem. I downgraded the Microsoft.Exchange.Webservices
package from 2.2
to 1.2
.
来源:https://stackoverflow.com/questions/21827225/xamarin-asp-mvc-4-action-with-parameters-not-working