使用jqgrid与web api,Entity Framework 5和ASP NET MVC 4时采取的方法

时间:2013-01-16 05:41:15

标签: entity-framework jqgrid asp.net-mvc-4 asp.net-web-api jqgrid-asp.net

我正在开发一个使用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>";
        }
    }
}

我的问题是,我希望在网格处于查看模式时显示House名称,并在编辑模式下选择(组合),然后发送回WebApi原始门以在数据库中更新。 / p>

注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的名称=&gt;那没关系)。但是,当我编辑任何记录时,返回webapi的json不发送Door对象,它发送DoorDto,然后Entity Framework 5的更新失败。

我知道我可以创建另一个收到DoorDto的方法,但它会很脏。有没有最好的方法来解决这个问题?

提前致谢!吉列尔莫。

0 个答案:

没有答案