MVC:在保存 IGGrid 时将模型从视图传递到控制器
MVC: Passing model from view to controller on saving IGGrid
你好 Whosebug 社区,
我做了一个小示例应用程序来说明我的问题。我正在使用 mvc 5 和 Infragistics Ignite UI igGrid。这就是页面的样子。
我传递给视图的模型是 class 公司。
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; }
}
这是我的控制器的样子
// 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;
}
}
我的视图看起来像这样
单击 "save" 按钮后,我需要保存来自公司和员工 table 的数据。这必须在单击一个按钮时执行,因为我正在做一些复杂的验证。我在保存员工 table 时没有问题,但在保存公司属性(公司名称和公司地址)时遇到问题。
非常感谢。
您可以触发自己的 ajax 请求,您可以在其中包含来自 igGrid 交易的数据和来自输入字段的附加数据。
网格有一个 transactionsAsString 方法,直接 returns 字符串化数据,准备发送到服务器。
这是代码的示例:
$("#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"]);
请注意,在 ajax 调用的成功函数中,应清除网格的旧事务,因为它们已在请求期间得到处理。
你好 Whosebug 社区,
我做了一个小示例应用程序来说明我的问题。我正在使用 mvc 5 和 Infragistics Ignite UI igGrid。这就是页面的样子。
我传递给视图的模型是 class 公司。
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; }
}
这是我的控制器的样子
// 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;
}
}
我的视图看起来像这样
单击 "save" 按钮后,我需要保存来自公司和员工 table 的数据。这必须在单击一个按钮时执行,因为我正在做一些复杂的验证。我在保存员工 table 时没有问题,但在保存公司属性(公司名称和公司地址)时遇到问题。
非常感谢。
您可以触发自己的 ajax 请求,您可以在其中包含来自 igGrid 交易的数据和来自输入字段的附加数据。 网格有一个 transactionsAsString 方法,直接 returns 字符串化数据,准备发送到服务器。 这是代码的示例:
$("#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"]);
请注意,在 ajax 调用的成功函数中,应清除网格的旧事务,因为它们已在请求期间得到处理。