24

ASP.NET MVCコントローラーのアクションメソッドは、主に「ビジネス」操作の処理に使用されますが、さらに多くの用途に使用できます。

人々がそのために行動を起こした創造的で有用なものが、他の人にとって実用的または有用であるかもしれないのを見るのは楽しいだろうと思いました。

これが私の貢献です:

Javascriptファイルコンカテネーター-httpリクエストの数を減らすには:

    [OutputCache(Duration = 5 * 60, VaryByParam="")]  // DONT USE "None" here *
    public ContentResult RenderJavascript(){

        StringBuilder js = new StringBuilder();
        StringWriter sw = new StringWriter(js);

        // load all my javascript files
        js.AppendLine(File.ReadAllText(Request.MapPath("~/Scripts/jquery.hoverIntent.minified.js")));
        js.AppendLine(File.ReadAllText(Request.MapPath("~/Scripts/jquery.corner.js")));
        js.AppendLine(File.ReadAllText(Request.MapPath("~/Scripts/rollingrazor.js")));

        return new ContentResult()
        {
            Content = js.ToString(),
            ContentType = "application/x-javascript"
        };
    }

それへのルートをマップします:

  // javascript
  routes.MapRoute(
     "js-route",
     "dynamic/js",
     new { controller = "Application", action = "RenderJavascript" }
  );

マスターページから参照してください:

    <script type="text/javascript" src="/dynamic/js"></script>

出力にキャッシュを設定したので、JSを変更してページを更新する場合は、キャッシュを無効にすることをお勧めします。

私は戻ってきて、それをgzipで圧縮する方法を理解する必要があります。

*VaryByParam = "None"を使用しないでください。これにより、Varyヘッダーが送信され、ブラウザーが戻って新しいバージョンを確認します。あなたが本当にあなたのjsコンテンツを変更しなければならないなら、あなたのユーザーはそれを5分待たなければならないだけです!

4

5 に答える 5

14

HTTP 301リダイレクトは賢いと見なされますか?

public class PermanentRedirectResult : ActionResult
{
    public string Url { get; set; }

    public PermanentRedirectResult(string url)
    {
        if (string.IsNullOrEmpty(url))
        {
            throw new ArgumentException("url is null or empty", "url");
        }
        this.Url = url;
    } 

    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context");
        }
        context.HttpContext.Response.StatusCode = 301;
        context.HttpContext.Response.RedirectLocation = Url;
    }
}
于 2009-01-28T01:06:58.487 に答える
3

CSS 構文拡張機能であるlessの部分的な実装

実際には、定数とミックスインと呼ばれるもののみをサポートしています。ソースはこちらです。

この投稿では、mvc での使用方法を説明しました (投稿はイタリア語ですが、ソースを見てください)。

ここで結果を見ることができます

于 2009-06-24T16:56:56.220 に答える
3

メール確認で結果を表示:

public abstract class ViewResultWithConfirmationEmail: ViewResult
{
    protected readonly string toAddress;

    protected ViewResultWithConfirmationEmail(string toAddress)
    {
        this.toAddress = toAddress;
    }

    protected abstract MailMessage CreateEmail(ControllerContext context);

    protected override void ExecuteResult(ControllerContext context)
    {
        MailMessage message = CreateEmail(context);
        var smtpClient = new SmtpClient();
        smtpClient.Send(message);

        base.ExecuteResult(context);
    }
}

ここでは実装の詳細の一部を省略していますが、これを使用してRegistrationSuccessResult、たとえば、ユーザー登録が成功した後に適切なテキストを含む電子メール メッセージを送信するクラスを実装できます。

アクション メソッド自体ではなく、サブクラス化された ViewResult でメッセージを送信することにした理由は、単体テストを簡単に分離できるようにするためです。

于 2009-06-19T21:13:04.983 に答える
2

実際には、「アクション」メソッドではなく、ルートベースのRPC実装を実装するカスタムコントローラーです。ルートデータからコントラクトとメソッドを識別し、サーバー側のサービス実装に呼び出しを渡します。かなり効率的です(もちろん、WCFやSOAPを使用しているだけではないという正当な理由があります)。

于 2009-06-17T21:59:50.437 に答える
0

どれだけのユーザーがエリアを使用しているかはわかりませんが、エリアでビューを変更する場合は XCopy スクリプトが必要です。領域は親プロジェクトにコンパイルされますが、(保存時ではなく) コンパイル時にのみコンパイルされるため、開発の機敏性を維持するには、XCopy を実行する必要があります。

于 2009-09-09T12:26:34.157 に答える