Can't Fetch Metadata from breeze ,error occurred - breeze

I am trying to develop some sort of calculator using breeze so that while calculating if user wanna save the datails he/she can save it into database and can display using breeze webapi.
My page with knockout bindings to get data from breeze
<div id="calculatorList">
<table class="table table-striped">
<tbody data-bind="foreach: calculate">
<tr>
<td data-bind="text: FirstNumber"></td>
<td data-bind="text: Operator"></td>
<td data-bind="text: SecondNumber"></td>
<td data-bind="text: Output"></td>
<td>
<button data-bind="click: editCalculate" class="btn btn-primary">Edit</button>
</td>
<td>
<button data-bind="click:deleteCalculate" class="btn btn-primary">Delete</button>
</td>
</tr>
</tbody>
</table>
</div>
My DbContext cs file
public class ResultDbContext : DbContext
{
public ResultDbContext() : base("DefaultConnection")
{
Database.SetInitializer<ResultDbContext>(null);
}
public DbSet<Result> Results { get; set; }
}
Controller
[BreezeController]
public class CalculatorController : ApiController
{
readonly EFContextProvider<ResultDbContext> _cp = new EFContextProvider<ResultDbContext>();
[HttpGet]
public string Metadata()
{
return _cp.Metadata();
}
[HttpGet]
public IQueryable database()
{
return _cp.Context.Results;
}
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
return _cp.SaveChanges(saveBundle);
}
}
But still I am getting this following error
{"$id":"1","$type":"System.Web.Http.HttpError, System.Web.Http","Message":"An error has occurred.","ExceptionMessage":"Method not found: 'System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()'.","ExceptionType":"System.MissingMethodException","StackTrace":" at Breeze.WebApi.EFContextProvider`1.GetMetadataFromDbContext(Object context)\r\n at Breeze.WebApi.EFContextProvider`1.GetMetadataFromContext(Object context)\r\n at Breeze.WebApi.EFContextProvider`1.BuildJsonMetadata()\r\n at Breeze.WebApi.ContextProvider.Metadata()\r\n at SpaCalculator.Controllers.CalculatorController.Metadata() in c:\\Users\\arajak\\Documents\\Visual Studio 2012\\Projects\\Calculator\\SpaCalculator\\Controllers\\CalculatorController.cs:line 22\r\n at lambda_method(Closure , Object , Object[] )\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"}
Can anyone will say why this error is occurring

Related

Server could not create ASP.reporting_reportvalueprediction_aspx

I am binding RDLC Report viewer in my project but getting this error
Server could not create ASP.reporting_reportvalueprediction_aspx.
Exception Details: System.InvalidOperationException: Server could not create ASP.reporting_reportvalueprediction_aspx.
Stack Trace:
[InvalidOperationException: Server could not create ASP.reporting_reportvalueprediction_aspx.]
__ASP.FastObjectFactory_app_web_sxcnkdic.Create_ASP_reporting_reportvalueprediction_aspx() +192
System.Web.Compilation.BuildResultCompiledType.CreateInstance() +31
System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) +104
System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) +33
System.Web.UI.PageHandlerFactory.GetHandler(HttpContext context, String requestType, String virtualPath, String path) +39
System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +386
System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +50
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +163
`<%# Page Language="vb" Debug="true" AutoEventWireup="false" CodeBehind="ReportValuePrediction.aspx.vb" Inherits="TimiWeb.ReportValuePrediction" %>
<%# Register Assembly="Microsoft.ReportViewer.WebForms, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager" runat="server">
</asp:ScriptManager>
<div>
<rsweb:ReportViewer ID="rptReportViewer" runat="server" Width="100%" Height="700px">
</rsweb:ReportViewer>
</div>
</form>
</body>
</html>`
**
I write these VB code to bind report**
Imports Microsoft.Reporting.WebForms
Public Class ReportValuePrediction
Inherits System.Web.UI.Page
Private _dt As DataTable
Public Sub New(ByVal dt As DataTable)
_dt = dt
End Sub
Protected Sub Page_Load(sender As Object, e As EventArgs)
If Not IsPostBack Then
Dim rep As LocalReport = rptReportViewer.LocalReport
rep.ReportPath = "/Reporting/ValuePrediction.rdlc"
Dim rds As New ReportDataSource()
If _dt.Rows.Count > 0 Then
rds.Name = "ValuePredictionDS"
rds.Value = _dt
rep.DataSources.Add(rds)
End If
End If
End Sub
End Class

Application_Error does not handle exception

I am working on MVC Application.
I have FilterConfig class :
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}
I am using it in Global.asax.cs
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
If i use this approach my Application_Error does not get fired when any exception occurs in controller.
protected void Application_Error()
{
var exception = Server.GetLastError();
AppLogging.WriteError(exception);
var httpException = exception as HttpException;
Response.Clear();
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Error";
routeData.Values["action"] = "Error";
routeData.Values["exception"] = exception;
Response.StatusCode = 500;
if (httpException != null)
{
Response.StatusCode = httpException.GetHttpCode();
switch (Response.StatusCode)
{
case 403:
routeData.Values["action"] = "UnauthorizedAccess";
break;
case 503:
routeData.Values["action"] = "SiteUnderMaintenance";
break;
case 404:
routeData.Values["action"] = "PageNotFound";
break;
}
}
// Avoid IIS7 getting in the middle
Response.TrySkipIisCustomErrors = true;
IController errorsController = new ErrorController();
HttpContextWrapper wrapper = new HttpContextWrapper(Context);
var rc = new RequestContext(wrapper, routeData);
errorsController.Execute(rc);
}
public ActionResult Error()
{
return View("Error");
}
Now when i do customErrors mode="Off" it goes to Application_Error Event but HandleErrorInfo comes as null.
Error.cshtml
#model HandleErrorInfo
#{
Layout = "~/Views/Shared/_LayoutAnonymous.cshtml";
ViewBag.Title = "Error";
}
<div class="error_wrapper">
<div class="col-sm-12 col-xs-12">
<div class=" error_col">
<div style="display: none;">
#if (Model != null)
{
<h3>#Model.Exception.GetType().Name</h3>
<pre>
#Model.Exception.ToString()
</pre>
<p>
thrown in #Model.ControllerName #Model.ActionName
</p>
}
</div>
<h1 class="error_h1">503 </h1>
<h2 class="error_h2">Looks like we're having some server issues. </h2>
<h3 class="error_h3">
Go back to the previous page and try again.<br>
If you think something is broken, report a problem.
</h3>
<div class="col-sm-12 col-xs-12 padding_none">
<button class="btn btn-primary btn_box error_btn" id="btnReport">Report A Problem</button>
<button class="btn btn-primary btn_box error_btn pull-left" onclick="location.href='#Url.Action("Requests", "Pricing", new RouteValueDictionary { { "area", "" } })'"> Go To Homepage</button>
</div>
</div>
</div>
</div>
#Scripts.Render("~/bundles/Error")
This is because your web config settings <customErrors mode="On" /> are overriding the default behavior. You will need to disable this setting. if you disable this, you can handle the error in the Application_Error event then redirect the user or display a message from this event. This web config setting is handling the errors and only unhandled errors will bubble up to the Application_Error event.

Can not understand why i am getting System.ArgumentNullException was unhandled by user code

i have the following Action method:-
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AssignGroup(int SecurityRoleID, int[] selectedGroups, int[] currentGroups)
{try
{if (ModelState.IsValid)
{ repository.AssignGroupRole(SecurityRoleID, selectedGroups, currentGroups);
repository.Save();
if (!Request.IsAjaxRequest())
{
return RedirectToAction("AssignGroup", new { id = SecurityRoleID });
}
else if (Request.IsAjaxRequest())
{
ViewBag.Users = repository.populateAssignedGroupData(SecurityRoleID);
return PartialView("_AssignGroup", repository.FindAllRole(SecurityRoleID));
}}}
And the following Partial view:-
#using (Html.BeginForm("AssignGroup", "SecurityRole", FormMethod.Post))
{
<span class="b">There are Currently #Model.Groups.Count() Group/s</span>
<table class="table table-striped table-bordered bootstrap-datatable datatable">
<thead>
<tr>
<th> #Html.DisplayNameFor(model => model.Groups.SingleOrDefault().Name)</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
#{
int cnt = 0;
List<TMS.ViewModels.GroupAssign> groups = ViewBag.Groups;
foreach (var group in groups.OrderBy(a=>a.Name)) {
if (cnt++ % 5 == 0) {
#: </tr> <tr>
}
#: <td>
<input type="checkbox"
name="selectedGroups"
value="#group.GroupId"
#(Html.Raw(group.IsChecked ? "checked=\"checked\"" : "")) />
#: #group.Name
#Html.Hidden("currentGroups", group.GroupId)
#:</td>
}
#: </tr>
}
</tbody>
#Html.HiddenFor(model => model.SecurityRoleID)
#Html.AntiForgeryToken()
</table>
<input type="submit" value="Assign Groups" class="btn btn-primary"/>}
and the following repository methods:-
public List<GroupAssign> populateAssignedGroupData(int SecurityRoleID)
{
var allGroups = AllGroup();
var securityRole = FindAllRole(SecurityRoleID);
var roleGroups = securityRole.Groups.Select(a => a.Name);
var viewModel = new List<GroupAssign>();
foreach (var group in allGroups)
{
viewModel.Add(new GroupAssign
{
GroupId = group.GroupID,
Name = group.Name,
IsChecked = roleGroups.Contains(group.Name, StringComparer.OrdinalIgnoreCase)
});
}
return viewModel;
}
public void AssignGroupRole(int id, int[] selectedGroups, int[] currentGroups)
{
var roleGroups = FindRole(id).Groups;
var securityRole = FindAllRole(id);
foreach (var group in roleGroups.ToList())
{
if (currentGroups != null)
{
for (int c = 0; c < currentGroups.Count(); c++)
{
if (group.GroupID == currentGroups[c])
{
securityRole.Groups.Remove(group);} }} }
if (selectedGroups != null)
{
for (int i = 0; i < selectedGroups.Count(); i++)
{
Group r = new Group();
r.GroupID = selectedGroups[i];
securityRole.Groups.Add(r);}}}
But whne i click on the "Assign Groups" button inside the view i will get the following error on the code foreach (var group in groups.OrderBy(a=>a.Name)) insdie the partial view:-
ystem.ArgumentNullException was unhandled by user code
HResult=-2147467261 Message=Value cannot be null. Parameter name:
source Source=System.Core ParamName=source StackTrace:
at System.Linq.OrderedEnumerable2..ctor(IEnumerable1 source, Func2 keySelector, IComparer1 comparer, Boolean descending)
at System.Linq.Enumerable.OrderBy[TSource,TKey](IEnumerable1 source, Func2 keySelector)
at ASP._Page_Views_SecurityRole__AssignGroup_cshtml.Execute() in c:\Users\Administrator\Documents\Visual Studio
2012\Projects\TMS\TMS\Views\SecurityRole_AssignGroup.cshtml:line 56
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext
pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext
controllerContext, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.<>c_DisplayClass1a.b_17()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter
filter, ResultExecutingContext preContext, Func`1 continuation)
InnerException:
The exception means that the source of the Linq query (groups) is null. You need to make sure that ViewBag.Groups is initialized (this does not happen anywhere in your posted code).
Did you want Model.Groups instead?

MVC error page is loaded in partial view

I have a error page with layout that works fine in most cases but when there is an error in a controller that returns a partial view the error page and its layout is placed in the partial view. I guess thats logical but I want the error page to be loaded as full page. How do I accomplish that without changing all error handling.
web.config:
<customErrors mode="On" defaultRedirect="~/Error">
<error statusCode="500" redirect="~/SystemPages/ErrorPage" />
<error statusCode="403" redirect="~/SystemPages/FileNotFound" />
<error statusCode="404" redirect="~/SystemPages/FileNotFound" />
</customErrors>
Global.asax:
Shared Sub RegisterGlobalFilters(ByVal filters As GlobalFilterCollection)
filters.Add(New HandleErrorAttribute())
End Sub
BaseController:
Protected Overrides Sub OnException(ByVal filterContext As ExceptionContext)
If filterContext Is Nothing Then Return
If TypeOf (filterContext.Exception) Is FaultException Then
Dim CodeName As String =
CType(filterContext.Exception, FaultException).Code.Name
Dim Message As String = CType(filterContext.Exception, FaultException).Message
TempData("ErrorMessage") = Message
Else
Logging.LogDebugData(HamtaDebugInformation(filterContext.RouteData))
Logging.WriteExceptionLog(filterContext.Exception)
TempData("ErrorMessage") = filterContext.Exception.Message
End If
Response.Redirect("/SystemPages/ErrorPage")
End Sub
SearchController:
Function GetData() As ActionResult
...
Return PartialView("_Tab", vmData)
ErrorPage:
#Code
ViewData("Title") = "ErrorPage"
Layout = "~/Views/Shared/_Layout.vbhtml"
End Code
<div id="mainContent" class="oneColumn">
<div class="panel">
<span class="panelTLC"></span>
<span class="panelTRC"></span>
<div id="inputPanel" class="panelContent">
<div class="modul">
<div class="modulHead">
<span class="TLC"></span>
<span class="TRC"></span>
</div>
<div class="modulContent">
<span class="TLC"></span><span class="TRC"></span>
<p>#ViewBag.ErrorMessage</p>
<p>#TempData("ErrorMessage")</p>
<span class="BLC"></span>
<span class="BRC"></span>
</div>
</div>
</div>
<span class="panelBLC"></span><span class="panelBRC"></span>
</div>
</div>
You could just use a try catch block and in the catch return a View() instead of PartialView().
Function GetData() As ActionResult
Try
...
Return PartialView("_Tab", vmData)
Catch ex as Exception
//Handle exception here ( send to error log, etc)
Return View("~/SystemPages/ErrorPage")
End Try
OR
web.config:
<customErrors mode="On"/>
BaseController:
Protected Overrides Sub OnException(ByVal filterContext As ExceptionContext)
If filterContext Is Nothing Then Return
Dim Message As String
If TypeOf (filterContext.Exception) Is FaultException Then
Dim CodeName As String =
CType(filterContext.Exception, FaultException).Code.Name
Message = CType(filterContext.Exception, FaultException).Message
Else
Logging.LogDebugData(HamtaDebugInformation(filterContext.RouteData))
Logging.WriteExceptionLog(filterContext.Exception)
Message = filterContext.Exception.Message
End If
Response.Redirect(String.Format("~/Error/HttpError/?message={1}", "HttpError", Message))
End Sub
ErrorController:
public class ErrorController : Controller
{
// GET: /Error/HttpError
public ActionResult HttpError(string message) {
return View("ErrorTest", message);
}
This post: ASP.NET MVC Custom Error Handling Application_Error Global.asax?
goes into how to handle each type of error separately. Keep in mind you are handling your exceptions in basecontroller instead of the global.asax file. Which if you were able to change your exception handling, that would be the better way to do it.

MVC asp.net PartialView causing No Parameterless constructor error?

Having an issue with an MVC 2.0 application partial view that all of the sudden when accessed and stuff is actually in the ViewData, the dreaded No parameterless Constructor error. I Have followed the code as much as I can and I'm getting no where. Here is my code:
Controller:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.ComponentModel;
using CINet.Areas.CatalystSearch.Models.Interfaces;
using CINet.Areas.CatalystSearch.Models.Repository;
using CINet.Areas.CatalystSearch.Models.Entities;
namespace CINet.Areas.CatalystSearch.Controllers
{
public class CatalystSearchController : Controller
{
// private SqlCatalystRepository _catalystItemRepository;
private ICatalystRepository _catalystInterface;
public int PageSize = 10; // Regulates size of page
#region CONSTRUCTOR
/// <summary>
/// Constructor which sets the passed repository to the local current
/// repository
/// </summary>
/// <param name="catalystRepository">Interface repository for controller</param>
public CatalystSearchController()
{
}
#endregion
#region DEFAULT VIEW
public ViewResult List([DefaultValue("")] string manufactureName, [DefaultValue("")] string manufacturePartNumber, [DefaultValue("")] string description, [DefaultValue(1)] int page)
{
IQueryable<CatalystItem> query = null;
CatalystFilter userFilter = new CatalystFilter();
int totalItems = 0;
// Be sure that the manufacture drop down has been selected
if (manufactureName != "")
{
// Set up CatalystFilter
userFilter.Manufacture = manufactureName;
userFilter.DescriptionFilter = description;
userFilter.ManufacturePartNumberFilter = manufacturePartNumber;
// connection string for SQL
string connString = "Data Source=se-cinet-dev;Initial Catalog=cinet;User ID=sa;Password=Carouse1";
// Get interface
_catalystInterface = new CatalystRepository(connString);
// Collects data from SQL repository and updates private local copy
// _catalystItemRepository = new SqlCatalystRepository(connString);
// Fills with list of Catalystitems based on filter.
query = _catalystInterface.GetCatalystItems(userFilter, page, PageSize);
// query = _catalystItemRepository.GetItems(userFilter, page, PageSize);
// Returns int of total items in list
totalItems = _catalystInterface.GetTotalOfItems(userFilter);
// totalItems = _catalystItemRepository.GetTotalOfItems(userFilter);
// Set up view model for passing to View
var viewModel = new CatalystModel
{
catalystItems = query.ToList(),
catalystFilter = userFilter,
/* Pass Paging properties to model*/
PagingInfo = new PagingInfo
{
CurrentPage = page,
ItemsPerPage = PageSize,
TotalItems = totalItems
},
ManufactureName = manufactureName
};
// View Data to be passed to SearchView
ViewData["catalystItems"] = viewModel;
return View(viewModel);
}
else
{
var viewModel = new CatalystModel();
return View(viewModel);
}
}
#endregion
#region SEARCH VIEW
/// <summary>
/// Partial View used to display results from controller
/// </summary>
/// <param name="model"> model passed via ViewData from List View</param>
/// <returns></returns>
[ChildActionOnly]
public ViewResult SearchView(CatalystModel model)
{
return View(model);
}
#endregion
}
}
listView:
<%# Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<CINet.Areas.CatalystSearch.Models.Entities.CatalystModel>" %>
<%# Import Namespace="CINet.Areas.CatalystSearch.HtmlHelpers" %>
<%# Import Namespace="CINet.Areas.CatalystSearch.Models" %>
<%# Import Namespace="CINet.Areas.CatalystSearch.Models.Interfaces" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<div>
<center>
<strong>
<%= Html.ValidationSummary("Please fill out required Fields") %></strong>
<h1>Catalyst Search Provider</h1>
<hr />
<%-- "Search","Catalyst" --%>
<%
using (Html.BeginForm())
{ %>
<table border="1">
<tr>
<td>Enter Description (optional):</td>
<td>
<%: Html.TextBoxFor(x=>x.Description) %>
</td>
</tr>
<tr>
<td>Enter Part Number (optional):</td>
<td>
<%: Html.TextBoxFor(x=>x.ManufacturePartNumber) %>
</td>
</tr>
<tr>
<td>Choose Manufacture:
</td>
<td>
<%: Html.DropDownListFor(x => x.ManufactureName, Model.GetAllManufactures()) %>
<%-- <%: Html.DropDownList("ManufactureName", Model.GetAllManufactures(),"Choose Item")%> --%>
</td>
</tr>
<tr>
<td>
&nbsp
</td>
<td>
<input type="submit" name="Search" value="Search" />
</td>
</tr>
</table>
<% } Html.EndForm(); %>
<!-- RENDERS PARTIAL VIEW TO DISPLAY GRID WITH SEARCH RESULTS -->
<% Html.RenderAction("SearchView", ViewData["catalystItems"]); %>
<br />
</center>
</div>
<div class="pager">
<% if (Model.PagingInfo != null)
{ %>
<%: Html.PageLinks(Model.PagingInfo, x => Url.Action("List", new { page = x, manufactureName = Model.catalystFilter.Manufacture, description = Model.catalystFilter.DescriptionFilter, manufacturePartNumber = Model.catalystFilter.ManufacturePartNumberFilter }))%>
<% } %>
</div>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server">
</asp:Content>
SearchView:
<%# Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CINet.Areas.CatalystSearch.Models.Entities.CatalystModel>" %>
<%# Import Namespace="CINet.Areas.CatalystSearch.HtmlHelpers" %>
<%# Import Namespace="CINet.Areas.CatalystSearch.Models" %>
<div>
<% if (Model.catalystItems != null)
{ %>
<table class="CatalystTableSpacer">
<tr>
<td>
Contract Price
</td>
<td>
Description
</td>
<td>
Manufacture Name
</td>
<td>
Manufacture Part Number
</td>
<td>
MSRP Price
</td>
<td>
Quantity Available
</td>
</tr>
<% foreach (var items in Model.catalystItems)
{%>
<tr>
<td>
<%: items.ContractPrice%>
</td>
<td>
<%: items.Description%>
</td>
<td>
<%: items.ManufactureName%>
</td>
<td>
<%: items.ManufacturePartNumber%>
</td>
<td>
<%: items.MSRPrice%>
</td>
<td>
<%: items.QuantityAvailable%>
</td>
</tr>
<% }
}
%>
</table>
</div>
CatalystModel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CINet.Areas.CatalystSearch.Models.Entities;
using System.ComponentModel.DataAnnotations;
using CINet.Areas.CatalystSearch.Models.Repository;
using CINet.Areas.CatalystSearch.Models.Interfaces;
namespace CINet.Areas.CatalystSearch.Models.Entities
{
public class CatalystModel
{
#region PRIVATE FIELDS
private string _connectionString = "Data Source=se-cinet-dev;Initial Catalog=cinet;User ID=sa;Password=Carouse1"; // connection string for SQL
private ICatalystRepository _repository = null;
#endregion
#region PUBLIC PROPERTIES
public IList<CatalystItem> catalystItems { get; set; }
public PagingInfo PagingInfo { get; set; }
public CatalystFilter catalystFilter { get; set; }
public SelectList Manufactures { get; set; }
public SelectList Categories { get; set; }
[Required]
public string ManufactureName { get; set; }
public string Description { get; set; }
public string ManufacturePartNumber { get; set; }
#endregion
#region CONSTRUCTOR
/// <summary>
/// Constructor instantiates SQL DB Connection
/// </summary>
public CatalystModel()
{
_repository = new CatalystRepository(_connectionString);
// Manufactures = GetAllManufactures();
}
#endregion
#region PUBLIC GET LISTS
/// <summary>
/// Returns ALL Manufactures in Database
/// </summary>
/// <returns></returns>
public SelectList GetAllManufactures()
{
SelectList manufactureNameSelectList;
List<Manufacture> manufactureTempList = new List<Manufacture>();
// Get List from DB
manufactureTempList = _repository.GetManufactureList();
// PUSH LIST INTO SELECT LIST
manufactureNameSelectList = new SelectList(manufactureTempList, "ManufactureName", "ManufactureName");
return manufactureNameSelectList;
}
#endregion
}
}
The error happens in the ListView calling the SearchView:
<% Html.RenderAction("SearchView", ViewData["catalystItems"]); %>
Any help??
Actual Error:
Server Error in '/' Application.
--------------------------------------------------------------------------------
No parameterless constructor defined for this object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.MissingMethodException: No parameterless constructor defined for this object.
Source Error:
Line 53: <!-- RENDERS PARTIAL VIEW TO DISPLAY GRID WITH SEARCH RESULTS -->
Line 54: <%-- <% Html.RenderPartial("SearchView", ViewData["catalystItems"]); %>
Line 55: --%> <% Html.RenderAction("SearchView", ViewData["catalystItems"]); %>
Line 56:
Line 57: <br />
Source File: c:\Users\gcoleman\Documents\Source Code\Sandbox\Jonathan Henk\MVC\CINet\CINet\Areas\CatalystSearch\Views\CatalystSearch\List.aspx Line: 55
Stack Trace:
[MissingMethodException: No parameterless constructor defined for this object.]
System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241
System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
System.Activator.CreateInstance(Type type) +6
System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) +403
System.Web.Mvc.DefaultModelBinder.BindSimpleModel(ControllerContext controllerContext, ModelBindingContext bindingContext, ValueProviderResult valueProviderResult) +544
System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +479
System.Web.Mvc.DefaultModelBinder.GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder) +45
System.Web.Mvc.DefaultModelBinder.BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor) +658
System.Web.Mvc.DefaultModelBinder.BindProperties(ControllerContext controllerContext, ModelBindingContext bindingContext) +147
System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Object model) +98
System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +2504
System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +548
System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +475
System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +181
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +830
System.Web.Mvc.Controller.ExecuteCore() +136
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +111
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +39
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +65
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +44
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +42
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +141
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +54
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +52
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38
System.Web.Mvc.<>c__DisplayClassa.<EndProcessRequest>b__9() +44
System.Web.Mvc.<>c__DisplayClass4.<Wrap>b__3() +34
System.Web.Mvc.ServerExecuteHttpHandlerWrapper.Wrap(Func`1 func) +76
System.Web.Mvc.ServerExecuteHttpHandlerWrapper.Wrap(Action action) +113
System.Web.Mvc.ServerExecuteHttpHandlerAsyncWrapper.EndProcessRequest(IAsyncResult result) +124
System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride) +1072
[HttpException (0x80004005): Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'.]
System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride) +3058371
System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage) +77
System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm) +28
System.Web.HttpServerUtilityWrapper.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm) +22
System.Web.Mvc.Html.ChildActionExtensions.ActionHelper(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues, TextWriter textWriter) +766
System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues) +98
System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper htmlHelper, String actionName, Object routeValues) +65
ASP.areas_catalystsearch_views_catalystsearch_list_aspx.__RenderContent1(HtmlTextWriter __w, Control parameterContainer) in c:\Users\gcoleman\Documents\Source Code\Sandbox\Jonathan Henk\MVC\CINet\CINet\Areas\CatalystSearch\Views\CatalystSearch\List.aspx:55
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +109
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8
System.Web.UI.Control.Render(HtmlTextWriter writer) +10
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
ASP.views_shared_site_master.__Renderform1(HtmlTextWriter __w, Control parameterContainer) in c:\Users\gcoleman\Documents\Source Code\Sandbox\Jonathan Henk\MVC\CINet\CINet\Views\Shared\Site.Master:26
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +109
System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer) +8820669
System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer) +31
System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output) +53
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100
System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer) +40
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +208
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8
System.Web.UI.Control.Render(HtmlTextWriter writer) +10
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +208
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8
System.Web.UI.Page.Render(HtmlTextWriter writer) +29
System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) +56
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3060
--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.237
Your problem is that the CatalystModel class doesn't have a default constructor so the default model binder cannot instantiate it here:
[ChildActionOnly]
public ViewResult SearchView(CatalystModel model)
{
return View(model);
}
This being said having such a child controller action that you are invoking like this:
<% Html.RenderAction("SearchView", ViewData["catalystItems"]); %>
is totally useless and bring strictly no value.
Why don't you render the partial directly:
<% Html.RenderPartial("SearchView", ViewData["catalystItems"]); %>
You should also read the Haacked blog post to better understand the differences between RenderAction and RenderPartial.
Or if you really (for some cryptic reason) have controller actions that take some models which do not have default constructors as action parameters you will need to write a custom model binder for this type and specify which of your custom constructors should be used to instantiate it and what values should be passed to it of course.
Try this:
<% Html.RenderAction("SearchView", new { model = ViewData["catalystItems"] }); %>

Resources