获取所有以“Max”结尾的表单元素作为id名称

时间:2011-05-29 04:01:45

标签: javascript asp.net html asp.net-mvc-3

我基本上有几个输入字段,它们共享相同的最后3个字符,“Max”。它们都与它们所属的“div”标签不同。我现在拥有的代码块看起来很糟糕:

                    if (Convert.ToInt32(Request.Form["MCQMax"]) > 0)
                {
                    TempData["Max"] = Convert.ToInt32(Request.Form["MCQMax"]);
                }
                else if (Convert.ToInt32(Request.Form["SAMax"]) > 0)
                {
                    TempData["Max"] = Convert.ToInt32(Request.Form["SAMax"]);
                }
                else if (Convert.ToInt32(Request.Form["PLMCQMax"]) > 0)
                {
                    TempData["Max"] = Convert.ToInt32(Request.Form["PLMCQMax"]);
                }
                else if (Convert.ToInt32(Request.Form["PLIFMax"]) > 0)
                {
                    TempData["Max"] = Convert.ToInt32(Request.Form["PLIFMax"]);
                }
                else if (Convert.ToInt32(Request.Form["PLDMax"]) > 0)
                {
                    TempData["Max"] = Convert.ToInt32(Request.Form["PLDMax"]);
                }

如何传递以Max结尾的任何表单元素而不是拥有这个冗余的代码块?谢谢大家!!

2 个答案:

答案 0 :(得分:1)

这样的事情:

var firstMaxFormKey = Request.Form.AllKeys
     .Where(arg => arg.EndsWith("Max"))
     .FirstOrDefault();
TempData["Max"] = Convert.ToInt32(Request.Form[firstMaxFormKey]);

<强> [编辑]

对不起,我没有给予足够的重视。我认为这就是你所需要的:

var max = Request.Form.AllKeys
        .Where(arg => arg.EndsWith("Max"))
        .Select(arg => Convert.ToInt32(Request.Form[arg]))
        .Where(arg => arg > 0)
        .FirstOrDefault();

答案 1 :(得分:1)

您可以将所有ID放入数组中,然后循环遍历它们:

(未经测试的半伪代码)

IDs={"MCAMax",...}

for(int i=0; i<IDs.length; i++){
   int theMax=Convert.ToInt32(Request.Form[IDs[i]]);
   if ( theMax > 0){
      TempData["Max"] = theMax;
      break;
   }
}