C# 用于删除非数字项的筛选器列表
我正在使用以下控制器方法获取Grid.Mvc中所有选定项的id,但是我注意到,我不仅获取选定项的id,而且获取每行的false,这显然是我不想要的 我将以下代码组合在一起,只留下id,这样我就可以做我的事情了。但是,有没有更好的方法来做到这一点,至少有没有一种方法可以过滤掉非数字列表项,而不是我现有的硬编码真/假的方法:C# 用于删除非数字项的筛选器列表,c#,asp.net-mvc,C#,Asp.net Mvc,我正在使用以下控制器方法获取Grid.Mvc中所有选定项的id,但是我注意到,我不仅获取选定项的id,而且获取每行的false,这显然是我不想要的 我将以下代码组合在一起,只留下id,这样我就可以做我的事情了。但是,有没有更好的方法来做到这一点,至少有没有一种方法可以过滤掉非数字列表项,而不是我现有的硬编码真/假的方法: //POST [HttpPost] [ActionName("Index")] public ActionResult IndexPost(FormCollection col
//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();
}
要回答有关筛选的问题,可以使用以下选项之一检索数值:
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));
要回答有关筛选的问题,可以使用以下选项之一检索数值:
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));
如果GetValuesSelectedAddressSids方法返回的不是所选地址的ID,那么您应该解决这个问题,而不是调整结果列表 在没有看到结果来自何处的情况下,我不知道为什么在这个列表中有true和false的值,但是如果每个条目都有true和false,那么如果查看SelectedAddressSids集合的填充位置,应该不难找到 不过,为了更直接地回答标题问题,如果您只是想避免硬编码true和false,您可以尝试解析为int,并放弃任何不解析的内容:
List<string> myList = new List<string>();
int dummy; // because TryParse takes an out parameter
myList.RemoveAll(x => !int.TryParse(x, out dummy));
但是,我鼓励您找出无效值的根本原因 如果GetValuesSelectedAddressSids方法返回的不是所选地址的ID,那么您应该解决这个问题,而不是调整结果列表 在没有看到结果来自何处的情况下,我不知道为什么在这个列表中有true和false的值,但是如果每个条目都有true和false,那么如果查看SelectedAddressSids集合的填充位置,应该不难找到 不过,为了更直接地回答标题问题,如果您只是想避免硬编码true和false,您可以尝试解析为int,并放弃任何不解析的内容:
List<string> myList = new List<string>();
int dummy; // because TryParse takes an out parameter
myList.RemoveAll(x => !int.TryParse(x, out dummy));
但是,我鼓励您找出无效值的根本原因 我能闻到一些东西。@inventanimate我注意到我不仅得到了所选项目的id,而且还得到了每一行的false,这显然是我不想要的。指示代码未按预期工作,这使其脱离了代码主题Review@SimonAndréForsberg我只是没有把它作为这条线索的要点来读。最好的猜测是你使用CheckBoxFor,它生成一个关联的隐藏输入,值为False,这样你就可以绑定到你的模型,因为未选中的框不会发布值,但是您使用FormCollection为什么要使用它而不是绑定到您的模型?因为我使用的是Grid.Mvc,绑定一个模型似乎很困难,因为复选框的状态我能闻到一些东西。@Invent Animate我注意到我不仅得到了所选项的id,而且得到了每一行的false,这显然是我不想要的。指示代码未按预期工作,这使其脱离了代码主题Review@SimonAndréForsberg我只是没有把它作为这条线索的要点来读。最好的猜测是你使用CheckBoxFor,它生成一个关联的隐藏输入,值为False,这样你就可以绑定到你的模型,因为未选中的框不会发布值,但是您使用FormCollection为什么要使用它而不是绑定到您的模型?因为我使用Grid.Mvc,绑定一个模型似乎很困难,因为复选框的状态我理解您的观点,因为现在这将是一个TODO,因为我有许多更紧迫的事情要完成,我知道这不是最终的解决方案,是一个“黑客”,但现在必须这样做。我理解你的观点,因为现在这将是一个TODO,因为我有一些更紧迫的事情要完成,我知道这不是最终的解决方案,是一个“黑客”,但现在必须这样做。