This question is locked. New answers and comments are not allowed.
Hi,
I am trying to implement a grid with ajax binding (backend is using LINQ and Entity Framework). Originally, I was getting the infamous Server Error '500' due to circular references. So I decided to follow the advice on the forums and implement a ViewModel approach (Implementing ViewModel).
I created a simple ViewModel as:
In my repository I did the following:
In my controller I did the following (where service simply calls the repository and passes back the IEnumerable):
And Finally my view:
Upon rendering, i get the following exception and stacktrace:
Any ideas on how to resolve?
Thanks!
I am trying to implement a grid with ajax binding (backend is using LINQ and Entity Framework). Originally, I was getting the infamous Server Error '500' due to circular references. So I decided to follow the advice on the forums and implement a ViewModel approach (Implementing ViewModel).
I created a simple ViewModel as:
using System; |
using System.Collections.Generic; |
using System.Linq; |
using System.Web; |
namespace UndertakingTracker.Models |
{ |
public class UndertakingViewModel |
{ |
public int undertakingID { |
get; |
set; |
} |
public string undertakingReferenceNumber { |
get; |
set; |
} |
public DateTime? dateReceived { |
get; |
set; |
} |
public string portfolioName { |
get; |
set; |
} |
public string propertyName { |
get; |
set; |
} |
public string lenderName { |
get; |
set; |
} |
public string status { |
get; |
set; |
} |
} |
} |
In my repository I did the following:
public IEnumerable<UndertakingViewModel> listAllUndertakingsAsViewModel() { |
return from u in _entities.Undertaking.Include("Lender").Include("Lender.Address").Include("Property").Include("Property.Address") |
select new UndertakingViewModel{ |
undertakingID = u.undertakingID, |
undertakingReferenceNumber = u.undertakingReferenceNumber, |
dateReceived = u.dateReceived, |
portfolioName = u.Property.portfolioName, |
propertyName = u.Property.propertyName, |
lenderName = u.Lender.lenderName, |
status = u.status |
}; |
} |
In my controller I did the following (where service simply calls the repository and passes back the IEnumerable):
public ActionResult Index() |
{ |
return View(_service.listAllUndertakingsAsViewModel()); |
} |
[GridAction] |
public ActionResult _AjaxBinding() |
{ |
return View(new GridModel<UndertakingViewModel> |
{ |
Data = _service.listAllUndertakingsAsViewModel() |
}); |
And Finally my view:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<UndertakingTracker.Models.UndertakingViewModel>>" %> |
[snip] |
<% |
Html.Telerik().Grid(Model) |
.Name("Undertakings") |
.Ajax(ajax => ajax.Action("_AjaxBinding", "Undertaking")) |
.Columns(columns => |
{ |
columns.Add(u => u.undertakingReferenceNumber).Title("UTI").Filterable(true); |
columns.Add(u => u.dateReceived).Title("Date Received").Format("{0:dd/MM/yyyy}"); |
columns.Add(u => u.portfolioName).Title("Portfolio"); |
columns.Add(u => u.propertyName).Title("Property"); |
columns.Add(u => u.lenderName).Title("Lender"); |
columns.Add(u => u.status).Title("Status"); |
columns.Add(u => u.undertakingID).Format(Html.ActionLink("Edit", "Edit", new { id = "{0}" })).Encoded(false).Title("Edit").Filterable(false).Sortable(false); |
columns.Add(u => u.undertakingID).Format(Html.ActionLink("Details", "Details", new { id = "{0}" })).Encoded(false).Title("Details").Filterable(false).Sortable(false); |
columns.Add(u => u.undertakingID).Format(Url.Action("Create", "UndertakingActivity", new { id = "{0}" })).Encoded(false).Title(" ").Filterable(false).Sortable(false); |
}) |
.Pageable() |
.Sortable() |
.Filterable() |
.Render(); |
%> |
Upon rendering, i get the following exception and stacktrace:
System.ArgumentException was unhandled by user code |
Message="The argument to DbIsNullExpression must refer to a primitive or reference type." |
Source="System.Data.Entity" |
StackTrace: |
at System.Data.Common.CommandTrees.DbIsNullExpression..ctor(DbCommandTree cmdTree, DbExpression arg, Boolean isRowTypeArgumentAllowed) |
at System.Data.Objects.ELinq.ExpressionConverter.CreateIsNullExpression(DbExpression operand, Type operandClrType) |
at System.Data.Objects.ELinq.ExpressionConverter.EqualsTranslator.CreateIsNullExpression(ExpressionConverter parent, Expression input) |
at System.Data.Objects.ELinq.ExpressionConverter.EqualsTranslator.TypedTranslate(ExpressionConverter parent, BinaryExpression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.NotTranslator.TypedTranslate(ExpressionConverter parent, UnaryExpression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.NotEqualsTranslator.TypedTranslate(ExpressionConverter parent, BinaryExpression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.ConditionalTranslator.TypedTranslate(ExpressionConverter parent, ConditionalExpression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input) |
at System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input, DbExpressionBinding& binding) |
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda) |
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call) |
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod) |
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.UnarySequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call) |
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod) |
at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq) |
at System.Data.Objects.ELinq.ExpressionConverter.Convert() |
at System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption) |
at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) |
at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() |
at Telerik.Web.Mvc.Extensions.EnumerableExtensions.Each[T](IEnumerable`1 instance, Action`1 action) |
at Telerik.Web.Mvc.UI.Grid`1.WriteRows(IGridRenderer`1 renderer) |
at Telerik.Web.Mvc.UI.Grid`1.WriteTable(IGridRenderer`1 renderer) |
at Telerik.Web.Mvc.UI.Grid`1.WriteHtml(HtmlTextWriter writer) |
at Telerik.Web.Mvc.UI.ViewComponentBase.Render() |
at Telerik.Web.Mvc.UI.ViewComponentBuilderBase`2.Render() |
at ASP.views_undertaking_index_aspx.__RenderContent2(HtmlTextWriter __w, Control parameterContainer) in c:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\UndertakingTracker\UndertakingTracker\Views\Undertaking\Index.aspx:line 16 |
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) |
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) |
at System.Web.UI.Control.Render(HtmlTextWriter writer) |
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) |
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) |
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) |
at ASP.views_shared_site_master.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in c:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\UndertakingTracker\UndertakingTracker\Views\Shared\Site.Master:line 48 |
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) |
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) |
at System.Web.UI.Control.Render(HtmlTextWriter writer) |
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) |
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) |
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) |
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) |
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) |
at System.Web.UI.Page.Render(HtmlTextWriter writer) |
at System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) |
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) |
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) |
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) |
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) |
InnerException: |
Any ideas on how to resolve?
Thanks!