我正在开发一个将 jqgrid 与 webapi、Entity Framework 5 和 ASPNET MVC 4 结合使用的项目。WebApi 控制器工作正常,我可以通过测试进行 CRUD 操作。
现在,我正在使用 jqgrid 开发 UI。例如,我的问题来自一对多关系。
我有这两个实体:
public class Door
{
public int Id { get; set; }
public string Description { get; set; }
public int HouseId { get; set; }
[JsonIgnore]
public House House { get; set; }
}
和这个
public class House
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Door> Doors { get; set; }
}
我在 jqgrid 中的 jqgrid colmode 代码是这个:
colModel: [
{ name: 'Id', index: 'id', editable: true, sortable: true, hidden: false, align: 'left' },
{ name: 'Description', index: 'description', editable: true, sortable: true, hidden: false, align: 'left' },
{
name: 'HouseId', index: 'HouseId', editable: true, sortable: true, hidden: false, align: 'left',
edittype: "select", editrules: { required: true }, editoptions: {
dataUrl: $("#ServiceUrlHouse").val(),
buildSelect: function (data) {
var response = jQuery.parseJSON(data);
var html = '<select>';
if (response && response.length) {
for (var i = 0, l = response.length; i < l ; i++) {
var item = response[i];
html += '<option value="' + item.Id + '">' + item.Name + '</option>';
}
}
return html + "</select>";
}
}
}
我的问题是我想在网格处于查看模式时显示房屋名称,并在编辑模式下选择(组合),然后将要在数据库中更新的原始门发送回 WebApi。
注1:如果我不放 [JsonIgnore] 我会得到自引用循环
注意 2我虽然想创建一个像这样的 DTO:
public class DoorDto
{
public int Id { get; set; }
public string Description { get; set; }
public int HouseId { get; set; }
public string HouseName { get; set; }
}
问题是我需要修改jqgrid部分代码并用HouseName更改HouseId列名,(如果我这样做,我可以在视图模式下看到House的名称=>没关系)。但是,当我编辑任何记录时,返回到 webapi 的 json 不会发送 Door 对象,而是发送 DoorDto,然后 Entity Framework 5 的更新失败。
我知道我可以创建另一个接收 DoorDto 的方法,但它会很脏。有没有最好的方法来处理这个?
提前致谢!吉列尔莫。