I am receiving an ArgumentException when invoking the index action of one of my controllers and I am not sure why. The error message is the following:
Server Error
I found it finally. It is a really embarassing typo by me. I mistyped the code:
public ActionResult Index()
{
var glaccounts = db.GLAccounts.ToString();
return View(glaccounts);
}
instead of:
public ActionResult Index()
{
var glaccounts = db.GLAccounts.ToList();
return View(glaccounts);
}
Then the framework wanted to load a view file, like this:
"~/Views/GLAccount/SELECT \r\n[Extent1].[Id] AS [Id], \r\n[Extent1].[OrgDefinitionId] AS [OrgDefinitionId], \r\n[Extent1].[GLAccountId] AS
[GLAccountId], \r\n[Extent1].[Name] AS [Name], \r\n[Extent1].[StartDate] AS [StartDate],
\r\n[Extent1].[EndDate] AS [EndDate]\r\nFROM [GLAccounts] AS [Extent1].aspx"
Hopefully, I will save couple of hours of debugging for someone else by posting this :(
The ambiguity comes from the fact that you are using string
as model type. This ambiguity could be resolved like this:
public ActionResult Index()
{
var glaccounts = db.GLAccounts.ToString();
return View((object)glaccounts);
}
or:
public ActionResult Index()
{
object glaccounts = db.GLAccounts.ToString();
return View(glaccounts);
}
or:
public ActionResult Index()
{
var glaccounts = db.GLAccounts.ToString();
return View("Index", glaccounts);
}
Notice the cast to object to pick the proper method overload as there is already a View
method which takes a string argument which represents the view name so you cannot throw whatever you want to it => if it's a string it must be the name of the view and this view must exist.