Asp.net mvc 3 将字符串转换为int,字符串数组
当传入多个字符串时,我在将id字符串转换为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
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]);
}
}
}