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