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

问题描述:

我基本上有几个输入字段共享最后3个字符“Max”。它们都与它们所属的“div”标签不同。我现在所拥有的代码块看起来很可怕:获取以“Max”作为ID名称的所有表单元素

    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"]); 
       } 

我如何通过在与最大一端有代码谢谢你们这种冗余区间,而不是任何形式的元素!?

事情是这样的:

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(); 
+0

尝试此, 感谢回复! – 2011-05-29 04:17:38

+0

@ValianthX - 我用一个更好的代码示例更新了我的答案。希望这是你真正需要的。 – 2011-05-29 04:30:02

你可以把所有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; 
    } 
}