0

当传入多个字符串时,我在将 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 时,您会建议我怎样做才能保存它们?

4

2 回答 2

0

MVC 3 在确定绑定方面非常强大,我不知道你在从用户那里获取服务 ID 的视图中到底在做什么,但我假设那里有表单,如果所有 Id 都是 int 你可以这样做您不需要任何转换,或者您可以使用 FormCollection。我不认为在 MVC 3 中使用 Request 是一个好主意,它并不真正属于整个 MVC 理念。

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

或者

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

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

于 2013-04-13T07:55:21.753 回答
-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. 我将 SaveChanges() 放在 for 循环之后。这将减少对数据库的调用,但仍能完成同样的事情。
于 2013-04-12T21:45:00.900 回答