我正在使用以下控制器方法来获取Grid.Mvc中所有选定项目的ID,但是我注意到我不仅获得了所选项目的ID,而且还获得了"false"
排,显然我不想要。
我已经把下面的代码气味放在一起,只留下我的id,这样我可以做我的事情然而有更好的方法这样做,至少有一种方法来过滤掉非数字列表项目而不是我现有的硬编码真/假的方法:
//POST
[HttpPost]
[ActionName("Index")]
public ActionResult IndexPost(FormCollection collection)
{
var selectedIds = collection.GetValues("selectedAddressesIds");
List<string> myList = new List<string>();
myList = selectedIds.ToList();
myList.RemoveAll(x => (x == "false") || (x == "true"));
if (myList != null )
{
foreach (var id in myList)
{
// do what you want with the selected id.
}
}
return View();
}
答案 0 :(得分:3)
要回答有关过滤的问题,您可以使用以下选项之一检索数值:
var exampleList = new List<string>{"1", "2", "rubbish", "3", "trash", "4.5"};
int dummyInt; // just because you need an out param of type int
// filteredInts will contain {1, 2, 3}
var filteredInts = exampleList.Where(item => int.TryParse(item, out dummyInt));
double dummyDouble; // just because you need an out param of type double
// filteredDoubles will contain {1, 2, 3, 4.5}
var filterdDoubles = exampleList.Where(item => double.TryParse(item, out dummyDouble));
当然,如果您只想过滤原始列表,可以使用RemoveAll()
的补充逻辑:
// If you only want int values:
myList.RemoveAll(item => ! int.TryParse(item, out dummyDouble));
// ..or want to also keep double values:
myList.RemoveAll(item => ! double.TryParse(item, out dummyDouble));
答案 1 :(得分:3)
如果GetValues(&#34; selectedAddressesIds&#34;)方法返回的内容不是所选地址的ID,那么就应该修复这个问题,而不是调整结果列表。
没有看到结果来自哪里我不确定为什么你有&#34; true&#34;和&#34;假&#34;在此列表中,但如果它适用于每个条目,那么如果您查看selectedAddressesIds集合的填充位置,则不应该太难找到。
更直接地回答标题问题,如果你只是想避免硬编码&#34; true&#34;和&#34;假&#34;您可以尝试解析为int并丢弃任何不解析的内容:
List<string> myList = new List<string>();
int dummy; // because TryParse takes an out parameter
myList.RemoveAll(x => !int.TryParse(x, out dummy));
但是,我鼓励您找到无效值的根本原因。