在我看来,
@using(Html.BeginForm("Action", "Controller", FormMethod.Post)){
<div>
@Html.TextBox("text_1", " ")
@Html.TextBox("text_2", " ")
@if(Session["UserRole"].ToString() == "Manager"){
@Html.TextBox("anotherText_3", " ")
}
</div>
<button type="submit">Submit</button>
}
在我的控制器中,
public ActionResult Action(FormCollection form){
if(!form.AllKeys.Contains("anotherText")){
ModelState.AddModelError("Error", "AnotherText is missing!");
}
}
我有一个表单并发布到我的方法,在我的方法中我想检查一个id为包含“anotherText”的文本框,但我使用.Contains()它总是给出false,这在我的formcollection中找不到。 ..如何才能检查包含“anotherText”的id的文本框是否存在?
答案 0 :(得分:4)
搜索失败是有道理的,因为它不是完全匹配。
请尝试使用StartsWith
,以查看是否有任何键以您正在寻找的值开头。
if (!form.AllKeys.Any(x => x.StartsWith("anotherText")))
{
// add error
}
答案 1 :(得分:2)
与string.Contains
不同,return true
如果string
包含给定的子字符串,那么您在此处检查是否在AllKeys
(这是一个集合)有任何Key
(单键 - 集合<的子项 / strong>)属于string
"anotherText"
。
if(!form.AllKeys.Contains("anotherText"))
因此,集合中的子项是整个 string
本身,而不是substring
string
因此,您的AllKeys
必须包含与之匹配的确切string
:
"anotherText_2", //doesn't match
"anotherText_1", //doesn't match
"anotherText_3", //doesn't match
"anotherText" //matches
与Contains
string
比较
string str = "anotherText_3";
str.Contains("anotherText"); //true, this contains "anotherText"
因此,您应该检查Any
的{{1}}是否Keys
:
"anotherText"