0

如果我有以下模型和操作:

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();
    }
}

但这不起作用(模棱两可)。我为对象编写了一个扩展方法,它只是检查所有公共属性是否都是默认值,但感觉应该有更好的方法。

4

2 回答 2

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

于 2013-09-24T10:38:47.760 回答
0

我建议您添加一个特殊的隐藏输入,您可以测试它以查看是否有数据。它可能bool是始终设置为 的true。如果结果是false,则没有发布您的任何形式。

或使用Request.HttpMethod找出这是 aPOST还是 a GET/HEAD

于 2013-09-24T10:59:38.223 回答