这是我的问题一步一步,
1-我从我的外部javascript文件中获取ajax请求,如下所示,
$.ajax({
type: "GET",
dataType: 'json',
url: '/Company/GetCompanies',
error: function (xhr, status, error) {
alert('error');
return false;
},
success: function (response) {
alert('success');
return false;
}
});
2 - 这是接收请求的动作方法
public ActionResult GetCompanies()
{
var model = new CompanyIndex();
model.FillCompanies();
return Json(model ,JsonRequestBehavior.AllowGet);
}
3 - CompanyIndex 是在我上面的操作方法中创建的 ViewModel。
public class CompanyIndex
{
public IList<Company> Companies { get; set; }
public void FillCompanies()
{
/* Part that is not working */
UnitOfWork unitOfWork = new UnitOfWork();
Companies = unitOfWork.CompanyRepository
.Get(orderBy: q => q.OrderBy(u => u.CompanyName)).ToList();
unitOfWork.Dispose();
/****************************/
/* This works fine */
var companyList = unitOfWork.CompanyRepository
.Get(orderBy: q => q.OrderBy(u => u.CompanyName)).ToList();
Companies = companyList.Select(x => new { name = x.CompanyName }).ToList()
.Select(x => new Company
{
CompanyName = x.name
}).ToArray<Company>();
/********************/
}
}
如您所见,我使用我的存储库和 Get 方法从数据库中获取公司实体,我也在下面分享。问题是当我从数据库中获取它们时,检索到的模型类型是System.Data.Entity.DynamicProxies.Company_someRandomStringHere
. 在这种情况下,Ajax 获取请求不成功并警告错误消息。
但是,如果我首先从 db 中获取并在 ViewModel 中创建 Company 对象并将它们分配给我的 List,则 ajax 工作正常,并且 ajax get 请求返回成功。当我在 ViewModel 上创建对象时,公司实体的类型CompanyManagement.Models.Company
应该是这样的。
以防万一您需要它,这是我用来从 db 获取数据的 Get 方法。
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
query = query.Where(filter);
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
query = query.Include(includeProperty);
if (orderBy != null)
return orderBy(query).ToList();
else
return query.ToList();
}
我不想手动创建新的 Company 对象。任何想法都非常感谢。提前致谢。