1

ビュー内のリンクに関しては、クエリ文字列の構築に役立つはずのクラスをインスタンス化する方法が必要です。必要なこのメソッドを静的メソッドとして使用することはできません。これにより、クエリ文字列ビルダーがデータを保持することになりますアプリケーションの全ライフタイム (重大な問題を引き起こす可能性があります)

皆さんへの私の質問は、実際のビュー自体ではなく、必要なクラス/オブジェクトをインスタンス化する方法はありますか?

SO質問を簡単にするために..とにかく、次のようなことができますか?

@MyInstantiatedObject.DoStuff()

私の見解では、これを行う前に私の見解では:

@{
    var MyInstantiatedObject = new MyClass()

}

オブジェクトをインスタンス化する必要がある場所はいくつかあると思いますが、私の質問は、他の方法でそれを行うことができるかどうかです(web.configにそれを処理するように指示する..またはいくつかのapp_code @helperマジックを使用するか、またはなにか)

前もって感謝します!

4

1 に答える 1

1

あなたが達成しようとしていることは、MVC の哲学に反します。アクション間でクエリ文字列データを保持したい場合は、次のようにカスタム ActionLink html ヘルパーを作成できます。

public static MvcHtmlString ActionLinkWithQueryString(this HtmlHelper htmlHelper, 
    string linkText, string actionName)
{
    var routeValueDictionary = new RouteValueDictionary();

    return htmlHelper.ActionLinkWithQueryString(linkText, 
        actionName, routeValueDictionary);
}

public static MvcHtmlString ActionLinkWithQueryString(this HtmlHelper htmlHelper, 
   string linkText, string actionName, RouteValueDictionary routeValues)
{
    var queryString = HttpContext.Current.Request.QueryString;

    if (queryString.Count > 0)
    {
        foreach (string key in queryString.Keys)
        {
            routeValues.Add(key, queryString[key]);
        }
    }

    return htmlHelper.ActionLink(linkText, actionName, routeValues);
}

次のように、コントローラーまたはコントローラー拡張でカスタム RedirectToAction メソッドを作成することもできます。

private RedirectToRouteResult RedirectToActionWithQueryString(string actionName)
{
    var queryString = Request.QueryString;
    var routeValues = new RouteValueDictionary();

    foreach (string key in queryString.Keys)
    {
        routeValues.Add(key, queryString[key]);
    }

    return RedirectToAction(actionName, routeValues);
}
于 2013-07-04T20:12:07.723 に答える