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!