嗨我有一个方法,我从视图中传递值复选框到控制器。以下是控制器方法。
但是,当我尝试从数据表中复选框2值时,它们都将作为值传递,并且列表将被正确分割,但是当添加到arraylist时,只会发送最后一个复选框。我的第一个值将被最后一个覆盖,但我的计数将保持不变。
任何帮助都将不胜感激,请随时与我轻松相处。
#include <iostream>
#define MAX 1000
int main()
{
int i;
for(i=1; i<= MAX; i= i<<1)
{
std::cout<<i <<" ";
}
for(i=1; i<= MAX; i= i*2)
{
std::cout<<i <<" ";
}
return 0;
}
答案 0 :(得分:0)
什么是s?您没有在任何地方声明它,并且在每个循环中继续使用相同的变量引用来更改值而不是引用。
当然,你的arraylist充满了相同的对象,你最终会在添加到ArrayList的所有项目中获得相同值的副本。
您需要声明变量 s 以获取要添加到ArrayList的确切类型,然后在每个循环中使用 new 对其进行初始化。
无论如何,使用List<T>
代替无类型ArrayList会好得多
public virtual ActionResult value(string value)
{
List<YourClassName> arr = new List<YourClassName>();
if(string.IsNullOrEmpty(value)
return View(arr);
var list = value.Split('#');
// Not needed
// if (list != null )
// {
// for (int i = 0; i < list.Length; i++)
// {
foreach (var key in list)
{
// In every loop create a new instance of s of the
// exact type for your class
YourClassName s = new YourClassName();
if (string.IsNullOrWhiteSpace(key))
continue;
s.NRIC = key.Split('|')[0];
s.DOB = Convert.ToDateTime(key.Split('|')[1];);
arr.Add(s);
}
// }
// }
return View(arr);
}
我不是MVC的专家,我想这个代码在你的Controller中,你想要返回一个通用列表explained in this question。随意评论/修复返回类型的不精确代码。
答案 1 :(得分:0)
s
都需要成为一个新对象。
foreach (var key in list)
{
// ...
var s = new MyObject(); // create new object
s.NRIC = nric;
s.DOB = Convert.ToDateTime(dob);
arr.Add(s);
}
因为如果没有,您将在每次执行arr.Add(s)
时添加对同一对象的引用。因此,更改此引用对象s.NRIC = nric;
的值会影响arr
的所有项目,因为每个项目都指向同一个对象。
此外,似乎您的for loop
是多余的,因为foreach
执行相同的工作,遍历数组list
。