Model MVC:在网格上将模型从视图传递到控制器

Model MVC:在网格上将模型从视图传递到控制器,model,infragistics,asp.net-mvc-5,ignite-ui,iggrid,Model,Infragistics,Asp.net Mvc 5,Ignite Ui,Iggrid,大家好,我的社区 我制作了一个小应用程序示例来说明我的问题。Im使用mvc 5和Infrastics Ignite UI igGrid。这就是页面的外观 我传递给视图的模型是class Company public class Company { public int ID { get; set; } public string CompanyName { get; set; } public string Address { get; set; } p

大家好,我的社区

我制作了一个小应用程序示例来说明我的问题。Im使用mvc 5和Infrastics Ignite UI igGrid。这就是页面的外观

我传递给视图的模型是class Company

public class Company
{
     public int ID { get; set; }
     public string CompanyName { get; set; }
     public string Address { get; set; }
     public IQueryable<Employee> EmployeeList { get; set; }
}

And the Employee Class: 

public class Employee
{
      public int ID { get; set; }
      public string FirstName { get; set; }
      public string LastName { get; set; }
}
上市公司
{
公共int ID{get;set;}
公共字符串CompanyName{get;set;}
公共字符串地址{get;set;}
公共IQueryable EmployeeList{get;set;}
}
以及雇员类别:
公营雇员
{
公共int ID{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
这就是我的控制器的样子

    // GET: Company
    public ActionResult Index()
    {
        Company myCompany = new Company { ID = 1, CompanyName = "Cool Company", Address = "USA" };
        Employee employee1 = new Employee { ID = 10, FirstName = "Christiano", LastName = "Ronaldo" };
        Employee employee2 = new Employee { ID = 11, FirstName = "Sebastian", LastName = "Schweinsteiger" };

        List<Employee> employeeList = new List<Employee>();
        employeeList.Add(employee1);
        employeeList.Add(employee2);
        myCompany.EmployeeList = employeeList.AsQueryable();
        return View("Index", myCompany);

    }

    [HttpPost]
    public ActionResult SaveData()
    {

        GridModel gridModel = new GridModel();
        List<Transaction<Employee>> transactions = gridModel.LoadTransactions<Employee>(HttpContext.Request.Form["ig_transactions"]);
        // here im getting the changes of the employee table. This works fine. But how do I get the changes of my company?

        foreach (Transaction<Employee> t in transactions)
        {
            //do something.. 
        }

        JsonResult result = new JsonResult();
        Dictionary<string, bool> response = new Dictionary<string, bool>();
        response.Add("Success", true);
        result.Data = response;
        return result;
    }
}
//获取:公司
公共行动结果索引()
{
公司myCompany=newcompany{ID=1,CompanyName=“Cool Company”,Address=“USA”};
雇员1=新雇员{ID=10,FirstName=“克里斯蒂亚诺”,LastName=“罗纳尔多”};
employee2=新员工{ID=11,FirstName=“Sebastian”,LastName=“schweinstieger”};
List employeeList=新列表();
employeeList.Add(employee1);
employeeList.Add(employee2);
myCompany.EmployeeList=EmployeeList.AsQueryable();
返回视图(“索引”,myCompany);
}
[HttpPost]
公共操作结果保存数据()
{
GridModel GridModel=新的GridModel();
列表事务=gridModel.LoadTransactions(HttpContext.Request.Form[“ig_事务”]);
//这里我得到了employee表的更改。这很好。但是我如何得到我公司的更改呢?
foreach(事务中的事务t)
{
//做点什么。。
}
JsonResult=新的JsonResult();
字典响应=新建字典();
回答。添加(“成功”,正确);
结果:数据=响应;
返回结果;
}
}
我的观点是这样的

单击“保存”按钮后,我需要保存公司和员工表中的数据。这必须在点击一个按钮后执行,因为我在做一些复杂的验证。我没有保存employee表的问题,但是我在保存公司属性(公司名称和公司地址)时遇到问题


非常感谢。

您可以触发自己的ajax请求,其中可以包括来自igGrid事务的数据和来自输入字段的附加数据。 网格有一个直接返回字符串化数据的方法,可以发送到服务器。 下面是代码的示例:

$("#saveChanges").on("igbuttonclick", function () { 
            var companyName = $("#CompanyName").val();
            var address = $("#Address").val();

            var companyData = JSON.stringify({ "CompanyName": companyName, "Address": address });

            var gridTransactions = grid.igGrid("transactionsAsString");

            var opts = {
                type: "POST",
                url: "@Url.Action("SaveData")",
                data: { "ig_transactions": gridTransactions, "companyData": companyData },
                success: function (data, textStatus, jqXHR) {
                    //clear transaction log on success
                    grid.igGrid("allTransactions").clear();
                },
                error: function (jqXHR, textStatus, errorThrown) {
                }
            };
            $.ajax(opts);
});
它将在控制器中执行相同的操作。用于从网格中反序列化事务的代码将完全相同。 要反序列化公司数据,您可以使用JavaScriptSerializer或其他反序列化传递数据的方法,例如:

JavaScriptSerializer serializer = new JavaScriptSerializer();
Company companyData = serializer.Deserialize<Company>(HttpContext.Request.Form["companyData"]);
JavaScriptSerializer serializer=新的JavaScriptSerializer();
Company companyData=serializer.Deserialize(HttpContext.Request.Form[“companyData]”);
注意,在ajax调用的success函数中,应该清除网格的旧事务,因为它们在请求期间已经被处理过了