从命名集合 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();
 }