gpt4 book ai didi

c# - 无法将它绑定(bind)到我的网格到 Telerik OpenAccess 数据源

转载 作者:太空宇宙 更新时间:2023-11-03 15:50:21 25 4
gpt4 key购买 nike

我正在使用 ASP.MVC、Kendo 和 OpenAccess 开发应用程序。

为特定实体创建自定义属性后,我尝试将其绑定(bind)到我的数据源和网格,但没有成功。

部分类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ErpMvc.OpenAccess
{
public partial class Customer
{
public string CustomProperty
{
get
{
return "My Custom Property Text";
}
}
}
}

服务

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ErpMvc.OpenAccess;
using Kendo.Mvc.Extensions;
using Kendo.Mvc.UI;

namespace ErpMvc.Services
{
public class CustomerService
{
public static IEnumerable<Customer> GetCustomers()
{
var dbContext = new EntitiesModel();

return dbContext.Customers.Select(customer => new Customer
{
CustomerID = customer.CustomerID,
FirstName = customer.FirstName,
CustomProperty = customer.CustomProperty
});

}
}
}

查看

@model IEnumerable<ErpMvc.OpenAccess.Customer>

@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}

@(Html.Kendo().Grid(Model)
.Name("Customers")
.Columns(columns =>
{
columns.Bound(c => c.FirstName).Title("First Name");
columns.Bound(c => c.CustomProperty).Title("Custom Property");
})
.Pageable()
.Sortable()
.Editable(editable => editable.Mode(GridEditMode.InLine))
.DataSource(dataSource => dataSource
.Ajax()
.Model(model => model.Id(customerID => customerID.CustomerID))
.Read(read => read.Action("Customers_Read", "Customer"))
.Update(update => update.Action("Customers_Update", "Customer"))
.PageSize(50)
)
)

Controller

public ActionResult Customers_Read([DataSourceRequest] DataSourceRequest request)
{
return Json(CustomerService.GetCustomers().ToDataSourceResult(request));
}
  • 我从 VS 获得的错误消息

  • 无法将属性或索引器“CustomProperty”分配给 -- 它是只读的

  • 在我的 CustomProperty 上定义了一个“set{}”之后,这个错误消息就解决了,但我开始得到另一个错误消息

  • (...) 如果“CustomProperty”是属性,请向其添加 FieldAlias 或 Storage 属性,或将其声明为字段的别名。

最佳答案

不要在 View 中使用您的 OpenAccess 对象。

尝试这样的事情(我没有测试过,只是凭内存):

View 模型:

定义一个包含 View 所需的所有数据的新类。

namespace ErpMvc.ViewModel
{
public class Customer
{
public int CustomerID { get; set; }
public string FirstName { get; set; }
public string CustomProperty { get; set; }
}
}

服务:

服务需要使用 OpenAccess 检索数据,然后将此数据传输到 View 模型。

public static IQueryable<Customer> GetCustomers()
{
IQueryable<Customer> result = null;
using(var dbContext = new EntitiesModel())
{
result = dbContext.Customers.Select(customer => new ViewModel.Customer
{
CustomerID = customer.CustomerID,
FirstName = customer.FirstName,
CustomProperty = customer.CustomProperty
});
return result;
}
}

Controller :

public ActionResult Customers_Read([DataSourceRequest] DataSourceRequest request)
{
return Json(CustomerService.GetCustomers().ToDataSourceResult(request));
}

查看:

模型没有传递到网格构造函数中,因为您正在使用 Read()。这也意味着您无需在 View 顶部定义模型。

@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}

@(Html.Kendo().Grid<ErpMvc.ViewModel.Customer>()
.Name("Customers")
.Columns(columns =>
{
columns.Bound(c => c.FirstName).Title("First Name");
columns.Bound(c => c.CustomProperty).Title("Custom Property");
})
.Pageable()
.Sortable()
.Editable(editable => editable.Mode(GridEditMode.InLine))
.DataSource(dataSource => dataSource
.Ajax()
.Model(model => model.Id(customerID => customerID.CustomerID))
.Read(read => read.Action("Customers_Read", "Customer"))
.Update(update => update.Action("Customers_Update", "Customer"))
.PageSize(50)
)
)

关于c# - 无法将它绑定(bind)到我的网格到 Telerik OpenAccess 数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26104532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com