让我们说我有一个POST动作,从某种形式接收一些特定的模型。如果未在表单中定义其中一个模型属性并尝试访问它,我将得到一个null(假设该字段可以为空)。另一方面,如果我要在表单中包含属性,但在那里放一个空值,我仍然会得到一个null。我有什么方法可以把这两个国家区分开来吗?
我的意思是,UpdateModel
之类的函数忽略未定义的属性,但尊重定义的空值。这表明应该可以互相分辨,但如何做到这一点?
答案 0 :(得分:0)
我以不同的方式解决了我原来的问题所以我不再需要上述功能了,但是今天出于某种原因,我需要检查QueryString
是否包含密钥(最好是不区分大小写的方式)。由于我在QueryString
中找不到这样的方法(也许它有一些晦涩的名字,或者我没有足够的搜索),我写了一个扩展名:
public static class NameValueCollectionExtensions
{
public static bool HasKey(this System.Collections.Specialized.NameValueCollection collection, string keyToFind, bool caseSensitive = true)
{
foreach (var key in collection.Keys)
{
if ((!caseSensitive && key.ToString().ToLower() == keyToFind.ToLower()) || (key.ToString() == keyToFind && caseSensitive))
{
return true;
}
}
return false;
}
}
顺便提一下,这应该允许检查是否定义了动作参数(如Flater建议的那样)。例如:
bool someKeyIsDefined = Request.QueryString.HasKey("SomeKey", false);
显然,这也可以使用AllKeys
属性来完成,该属性将键列表作为旧的字符串数组返回,您可以使用linq处理它。