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

これでうまくいくと思いましたが、今はテストできません。

編集

本当に何も渡さないとうまくいかないのは奇妙に思えますが、デフォルトをチェックするためのよりエレガントな方法を探している場合は、フィルターに空のパブリック静的読み取り専用フィールドを作成してから、チェックコードを作成できますのように非常に読みやすい

if (filters == Filters.Empty)
{ 
    //passed in with nothing
}

に似ていstring.Emptyます。

于 2013-09-24T10:38:47.760 に答える
0

データがあるかどうかをテストできる特別な隠し入力を追加することをお勧めします。bool常に に設定されている可能性がありますtrue。であることが判明した場合false、あなたのフォームは投稿されていません。

または、Request.HttpMethodこれが か かを調べるために使用します。POSTGET/HEAD

于 2013-09-24T10:59:38.223 に答える