从命名集合 MVC 中提取键值对
Extract Key Value Pairs from a named Collection MVC
我正在从松散绑定的剃刀表单中提取表单值。我不使用强绑定模型的原因是付款值字段和类别是动态的。
到达控制器的表单集合数组如下:
Payment {"1":"120","4":"23","6":"12","8":"120","9":"100"}
我需要拆分数组,例如(当 PayCatId =1,Pay =120)(当 PayCatId =4,Pay=23)等。
string [] pa =collection["Payment"].Split(char.Parse(","));
string [] pc =collection.AllKeys["Payment"].Split(char.Parse(","));
然后我尝试使用以下逻辑保存到数据库;
for (var i = 0; i < pa.Length; i++)
{
payment.Pay = Convert.ToDecimal(pa[i]);
payment.PayCatId = Convert.ToInt32(pa[i]); (added:how do i get this value from pair?)
payment.PayDate = DateTime.Now;
db.Payments.Add(payment);
db.SaveChanges();
}
删除了错误位,因为我了解到该方法不适用
我也想知道这是否是实现此目标的正确可靠方法 objective。
您可以结合使用 Split、Select 和 ToDictionary 来执行此操作,请参阅代码:
var srt = "\"1\":\"120\",\"4\":\"23\",\"6\":\"12\",\"8\":\"120\",\"9\":\"100\"";
srt.Split(',')
.Select(x => x.Split(':'))
.ToDictionary(x => int.Parse(x[0].Replace("\"","")), x => int.Parse(x[1].Replace("\"","")))
/*
Output:
Dictionary<int, int>(5)
{
{ 1, 120 },
{ 4, 23 },
{ 6, 12 },
{ 8, 120 },
{ 9, 100 }
}
*/
只需一次循环执行两个步骤而不是一个
for (var i = 0; i < pa.Length; i+=2)
{
payment.Pay = Convert.ToDecimal(pa[i]);
payment.PayCatId = Convert.ToInt32(pa[i+1]);
payment.PayDate = DateTime.Now;
db.Payments.Add(payment);
db.SaveChanges();
}
我正在从松散绑定的剃刀表单中提取表单值。我不使用强绑定模型的原因是付款值字段和类别是动态的。
到达控制器的表单集合数组如下:
Payment {"1":"120","4":"23","6":"12","8":"120","9":"100"}
我需要拆分数组,例如(当 PayCatId =1,Pay =120)(当 PayCatId =4,Pay=23)等。
string [] pa =collection["Payment"].Split(char.Parse(","));
string [] pc =collection.AllKeys["Payment"].Split(char.Parse(","));
然后我尝试使用以下逻辑保存到数据库;
for (var i = 0; i < pa.Length; i++)
{
payment.Pay = Convert.ToDecimal(pa[i]);
payment.PayCatId = Convert.ToInt32(pa[i]); (added:how do i get this value from pair?)
payment.PayDate = DateTime.Now;
db.Payments.Add(payment);
db.SaveChanges();
}
删除了错误位,因为我了解到该方法不适用 我也想知道这是否是实现此目标的正确可靠方法 objective。
您可以结合使用 Split、Select 和 ToDictionary 来执行此操作,请参阅代码:
var srt = "\"1\":\"120\",\"4\":\"23\",\"6\":\"12\",\"8\":\"120\",\"9\":\"100\"";
srt.Split(',')
.Select(x => x.Split(':'))
.ToDictionary(x => int.Parse(x[0].Replace("\"","")), x => int.Parse(x[1].Replace("\"","")))
/*
Output:
Dictionary<int, int>(5)
{
{ 1, 120 },
{ 4, 23 },
{ 6, 12 },
{ 8, 120 },
{ 9, 100 }
}
*/
只需一次循环执行两个步骤而不是一个
for (var i = 0; i < pa.Length; i+=2)
{
payment.Pay = Convert.ToDecimal(pa[i]);
payment.PayCatId = Convert.ToInt32(pa[i+1]);
payment.PayDate = DateTime.Now;
db.Payments.Add(payment);
db.SaveChanges();
}