Asp.net mvc 3 将字符串转换为int,字符串数组

Asp.net mvc 3 将字符串转换为int,字符串数组,asp.net-mvc-3,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(serviceAssig

当传入多个字符串时,我在将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.ParseRequest.Params[Service];=1,然后运行并保存数据库。但是,如果您具备以下条件,您将获得:

“1,2”哪三个。我想要的是1,然后是2,不是1,2

1和2是什么

当您创建一个新位置时,您可以为该位置选择服务。在这个问题中,服务id是1和2。如果我选择了一项服务,那么它会保存下来,一切都很好。当我选择两个或多个时,它不起作用

我想我可以做到:

因为服务毕竟是一个数组。这究竟是如何导致数据库问题和其他混乱的


那么,当您为某个位置选择id 1和id 2时,您建议我如何使其保存id 1和id 2?

这将起作用。刚刚测试过:

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();
}
作为旁注,我可能会做两个更改:

我会用foreach语句。没有真正的区别;只是少打字。 我会把SaveChanges放在for循环之后。这将减少对数据库的调用,但仍然可以完成相同的任务。
MVC 3在解决绑定方面非常强大,我不知道您在从用户获取服务ID的视图中到底在做什么,但我假设存在表单,如果所有ID都是int,您可以这样做,不需要任何转换,或者您可以使用FormCollection。我不认为在MVC 3中使用请求是一个好主意,它并不真正属于整个MVC思想

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


无论如何,这些都不是MVC,它们应该可以工作,但我建议您在视图和控制器中使用模型

如果您使用ASP.NET MVC,您可能不想深入研究Request.Params属性。您应该在控制器操作中使用一个模型,并让ASP.NET为您进行绑定。是否有一种方法可以使用我目前的方式进行绑定?它声明它无法在对话的分割部分上从字符串转换为字符[]。Request.Params[service].Split,;抛出错误。抱歉,我无意中在split函数调用中使用了双引号而不是单引号。上面的编辑版本适用于您。
 public void Add(FormCollection frm)
        {
            foreach (var item in frm.AllKeys)
            {
                if (item.StartsWith("service"))
                {
                    int serviceID = Int32.Parse(frm[item]);
                }
            }
        }