将字符串转换为int,字符串数组

时间:2013-04-12 21:27:35

标签: asp.net-mvc-3

当传入多个字符串时,我遇到将id字符串转换为int的问题,代码显示如下:

            for(int i = 0; i < Request.Params["service"].Length; i++)
            {
                int serviceID = int.Parse(Request.Params["service"]);

                db.ServiceAssignments.Add(serviceAssignment);
                serviceAssignment.locationID = locationID;
                serviceAssignment.ServiceID = serviceID;

                db.SaveChanges();
            }

如果你传入一个参数,你会得到:int.Parse(Request.Params["Service"]); = 1,然后工作,数据库保存。但如果你有以下内容,你会得到:

'1,2'这三个。我想要的是1然后是2,而不是1,2。

什么是1和2?

创建新位置时,您可以选择该位置的服务。服务ID,在这个问题的情况下是1和2.如果我选择一个服务然后它保存,一切都很好。当我选择两个或更多时,它不起作用。

我虽然能做到:

Request.Params["Service"][i]因为“服务”毕竟是一个数组。这怎么会导致数据库问题和其他一切混乱。

那么当你为某个地点选择它时,你会建议我能做什么来保存id 1和id 2?

2 个答案:

答案 0 :(得分:0)

MVC 3非常强大,可以找出绑定,我不知道你在视图中做了什么,从用户那里得到服务ID但我认为那里有表格,如果所有的ID都是int你可以做像这样,你不需要任何转换,或者你可以使用FormCollection。我不认为在MVC 3中使用Request是一个好主意,它并不真正属于整个MVC的想法。

public void Add(int[] service)
        {
            foreach (var item in service)
            {
                int serviceID = item;
            }
        }

OR

 public void Add(FormCollection frm)
        {
            foreach (var item in frm.AllKeys)
            {
                if (item.StartsWith("service"))
                {
                    int serviceID = Int32.Parse(frm[item]);
                }
            }
        }

无论如何这些都不是MVC,这些应该可行,但我建议你在视图和控制器中使用模型

答案 1 :(得分:-1)

这会奏效。刚试过它:

string[] items = Request.Params["service"].Split(','); 

for (int i = 0; i < items.Length; i++)
{
    int serviceID = int.Parse(items[i]);
    db.ServiceAssignments.Add(serviceAssignment);
    serviceAssignment.locationID = locationID;
    serviceAssignment.ServiceID = serviceID;
    db.SaveChanges();
}

作为旁注,我可能会做两处修改:

  1. 我会使用foreach声明。没有真正的区别;只是少打字。
  2. 我在for循环后放置了SaveChanges()。这将减少对数据库的调用,但仍然可以完成同样的事情。