【发布时间】:2018-10-10 04:29:47
【问题描述】:
我一直在尝试更改 RouteAttr.RoutedForRole 的值,如果它等于
SHead 但我检查了运行时,query 没有更改,即使它进入了 foreach 循环并且有有效的条目。我还尝试在视图中添加 foreach 循环,但它没有改变任何东西。
public ViewResult Index()
{
IQueryable<ServiceRequestViewModel> query;
query = from c in context.ServiceRequests
select new ServiceRequestViewModel
{
ServiceRequestId = c.ServiceRequestId,
ServiceDescription = c.ServiceDescription,
RequestNumber = c.RequestNumber,
Title = c.Title,
RouteAttr = c.RouteAttr,
LogAttr = c.LogAttr
};
foreach (var item in query)
{
if (item.RouteAttr.RoutedForRole == WorkflowRole.SHead)
{
item.RouteAttr.RoutedForRole = WorkflowRole.HRManager;
}
}
return View(query);
}
下面是我的网格视图。
@Html.Grid(Model).Columns(col =>
{
col.Add(o => o.ServiceRequestId)
.Encoded(false)
.Sanitized(false)
.Filterable(true)
.Titled("SRF No.")
.SetWidth(150)
.RenderValueAs(o => Html.ActionLink(o.RequestNumber, "Details", new { id = o.ServiceRequestId }));
col.Add(o => o.Title)
.Filterable(true)
.SetWidth(400)
.Titled("Title");
col.Add(o => o.LogAttr.CreatedBy)
.Filterable(true)
.Titled("Requestor");
col.Add(o => o.RouteAttr.RoutedForRole)
.Filterable(true)
.Titled("Status");
}).WithPaging(10).Sortable(true)
我在 cmets 中被告知为什么它没有返回,所以现在我想知道如何更新 iqueryable 中的项目并将其返回到视图中。
【问题讨论】:
-
我猜你正在查询一个数据库,并将结果带入内存,在内存中执行更新,但不将其保存回数据库。当您返回查询时,将对数据库重新执行查询。您只是丢弃了您在循环中所做的更改。
-
我不想更改数据库中的数据。我只希望显示在视图中改变。
-
然后执行
var data = query.ToArray();,更改data中的数据,然后更改return View(data); -
@Enigmativity
ServiceRequestViewModel需要System.Linq.IQueryable
标签: asp.net-mvc linq gridview foreach iqueryable