如果我有以下模型和行动:
public class Filters
{
public string Keyword {get;set;}
public int ArticleId {get;set;}
}
public class MyController : Controller
{
public ActionResult Full(Filters filters)
{
...
return View();
}
}
如果您使用没有查询字符串或表单变量的Full
操作路由来填充filters
中的值,则只需获得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();
}
}
但这不起作用(含糊不清)。我写了一个对象的扩展方法,只是检查所有公共属性是否都是默认值,但感觉应该有更好的方法。
答案 0 :(得分:1)
设置默认值是否有效?
public class MyController : Controller
{
public ActionResult Full(Filters filters = null)
{
if (filters == null)
{
//nothing passed in
}
else
{
//do some work
}
return View();
}
}
认为这会起作用,但现在无法测试。
修改强>:
如果您真的没有传递任何内容,似乎奇怪它不起作用,但如果您正在寻找可能更优雅的方法来检查默认值,您可以在Filter上创建一个名为Empty的公共静态只读字段然后你的支票代码可以像
一样可读if (filters == Filters.Empty)
{
//passed in with nothing
}
与string.Empty
相似。
答案 1 :(得分:0)
我建议你添加一个特殊的隐藏输入,你可以测试它是否有数据。它可以是bool
,始终设置为true
。如果结果是false
,则不会发布您的任何形式。
或使用Request.HttpMethod
查看这是POST
还是GET/HEAD
。