在操作方法中检测空对象
本文关键字:对象 检测 操作方法 | 更新日期: 2023-09-27 18:32:29
如果我有以下模型和操作:
public class Filters
{
public string Keyword {get;set;}
public int ArticleId {get;set;}
}
public class MyController : Controller
{
public ActionResult Full(Filters filters)
{
...
return View();
}
}
如果您路由到没有查询字符串或表单变量来填充filters
中的值的Full
操作,则只需获得new Filters()
。
我需要引起一种情况,我知道这种情况在哪里,或者查询字符串/表单变量是否有助于填充filters
。
我想我可以使用多态性,比如:
public class MyController : Controller
{
public ActionResult Full()
{
var filters = <Perhaps read out of session state>
return Full(filters);
}
public ActionResult Full(Filters filters)
{
...
return View();
}
}
但这不起作用(模棱两可)。我为对象编写了一个扩展方法,该方法只是检查是否所有公共属性都是默认值,但感觉应该有更好的方法。
设置默认值有效吗?
public class MyController : Controller
{
public ActionResult Full(Filters filters = null)
{
if (filters == null)
{
//nothing passed in
}
else
{
//do some work
}
return View();
}
}
以为这会起作用,但现在无法测试它。
编辑:
看起来很奇怪,如果您真的没有传递任何内容,它不起作用,但是如果您正在寻找一种更优雅的方式来检查默认值,您可以在过滤器上创建一个名为 Empty 的公共静态只读字段,然后您的检查代码可能非常可读,例如
if (filters == Filters.Empty)
{
//passed in with nothing
}
类似于string.Empty
.
我建议你添加一个特殊的隐藏输入,你可以测试它以查看是否有数据。它可能是一个始终设置为true
bool
。如果事实证明是false
,则没有发布您的任何形式。
或者使用Request.HttpMethod
来查明这是POST
还是GET/HEAD
。