string.contains(string)匹配整个单词

时间:2016-01-28 05:04:41

标签: c# asp.net-mvc validation asp.net-mvc-4 formcollection

在我看来,

@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的文本框是否存在?

2 个答案:

答案 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"