C# 我能区分未定义的动作参数和空参数吗?

C# 我能区分未定义的动作参数和空参数吗?,c#,asp.net-mvc,C#,Asp.net Mvc,假设我有一个POST操作,它从某种形式接收特定的模型。如果表单中没有定义一个模型属性,并且我尝试访问它,我将得到一个null(假设该字段可以为null)。另一方面,如果我在表单中包含属性,但在那里放一个空值,我仍然会得到null。我有没有办法区分这两个州 我的意思是,像UpdateModel这样的函数忽略未定义的属性,但尊重已定义的空值。这意味着应该可以区分一个和另一个,但如何做到这一点?我以不同的方式解决了最初的问题,因此不再需要上述功能,但今天出于某种原因,我需要检查QueryString是

假设我有一个POST操作,它从某种形式接收特定的模型。如果表单中没有定义一个模型属性,并且我尝试访问它,我将得到一个null(假设该字段可以为null)。另一方面,如果我在表单中包含属性,但在那里放一个空值,我仍然会得到null。我有没有办法区分这两个州


我的意思是,像
UpdateModel
这样的函数忽略未定义的属性,但尊重已定义的空值。这意味着应该可以区分一个和另一个,但如何做到这一点?

我以不同的方式解决了最初的问题,因此不再需要上述功能,但今天出于某种原因,我需要检查
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进行处理。

只是一个猜测,但是
请求中是否仍会显示空字段。QueryString
?不幸的是,我现在无法测试它。@Flater听起来似乎有道理。必须测试它。这就是为什么我们使用ViewModels来更新数据。