如何解决SqlFunctions.StringConvert添加了不必要的填充
| 在我的viewmodel中,我将为下拉列表返回以下内容:public IEnumerable<SelectListItem> Statuses
{
get
{
using (var context = new AssetManager.Models.AssetManagerEntities())
{
var query = from status in context.AssetStatuses
where status.Reserved != true
select new SelectListItem()
{
Value = sqlFunctions.StringConvert((double)status.Id),Text = status.Name,Selected = false
};
return query.ToList();
}
}
}
然后在我看来,它有点像这样:
@Html.DropDownListFor(model => model.Status,(IEnumerable<SelectListItem>)Model.Statuses)
一切正常,除了sqlFunctions.StringConvert,默认情况下使字符串的长度为10,所以我最终在html中得到了以下结果:
<option value=\" 7\">Free to loan</option>
注意值字段中的间距。这是一个问题,因为我的viewmodel要求此字段为int。
我可以简单地指定length参数,但这不是动态的。
有没有人看过这个问题,或者有解决方案?
谢谢,
缺口
解决方法
更新资料
蒂姆下面的答案比这是一个更好的解决方案,但是我无法删除已接受的答案,并且OP没有响应我接受他的答案的请求。
原始答案
最简单的方法可能是将转换工作转移到服务器上,而不是数据上下文上。如果您将数据层与表示层分开,则会自动发生。但是为了简单起见,我将坚持使用您当前的体系结构:
var query = from status in context.AssetStatuses
where !status.Reserved
select new
{
status.Id,status.Name
};
return query.AsEnumerable()
.Select(status => new SelectListItem
{
Value = status.Id.ToString(),Text = status.Name,Selected = false
})
.ToList();
, 更改为:
Value = SqlFunctions.StringConvert((double)status.Id).Trim(),
, public IEnumerable<SelectListItem> Statuses
{
get
{
using (var context = new AssetManager.Models.AssetManagerEntities())
{
return (from status in context.AssetStatuses.ToList()
where status.Reserved != true
select new SelectListItem()
{
Value = status.Id.ToString(),Selected = false
});
}
}
}
, 与LINQ to Entities一起使用的另一个选择是使用隐式类型转换(例如Value = \"\" & status.Id
)进行串联。但是,如果要使用此方法使用多个串联,这将导致必须解决的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。