1

我正在开发一个将 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 的方法,但它会很脏。有没有最好的方法来处理这个?

提前致谢!吉列尔莫。

4

0 回答 0