我可以从null中告诉未定义的动作参数吗?

时间:2014-07-08 11:12:23

标签: c# asp.net-mvc

让我们说我有一个POST动作,从某种形式接收一些特定的模型。如果未在表单中定义其中一个模型属性并尝试访问它,我将得到一个null(假设该字段可以为空)。另一方面,如果我要在表单中包含属性,但在那里放一个空值,我仍然会得到一个null。我有什么方法可以把这两个国家区分开来吗?

我的意思是,UpdateModel之类的函数忽略未定义的属性,但尊重定义的空值。这表明应该可以互相分辨,但如何做到这一点?

1 个答案:

答案 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处理它。