asp.net-mvc-3 - jquery $ .post()によってJson()を使用して返されたJSON

asp.net-mvc-3 jquery jsonresult

私が間違っていることを理解することはできません-これは以前は機能していたと確信しています...:

<script type="text/javascript">
  $("#@containerId form").submit(function (event) {
    event.preventDefault();
    var form = $(this);
    if (form.valid()) {
      $.post(form.attr('action'), form.serialize(), function(data) {
        $("#@containerId").replaceWith(data.result);
      }, "json");
    }
  });      
</script>


JSON応答内でオブジェクトとして返すことができるように、ビューの結果を文字列として返す関数があります。

protected string RenderViewResultToString(ViewResultBase viewResult) {
  using (var sw = new StringWriter()) {
    if (string.IsNullOrEmpty(viewResult.ViewName))
      viewResult.ViewName = ControllerContext.RouteData.GetRequiredString("action");
    ViewEngineResult result = null;
    if (viewResult.View == null) {
      result = viewResult.ViewEngineCollection.FindPartialView(ControllerContext, viewResult.ViewName);
      if (result.View == null)
        throw new InvalidOperationException("Unable to find view. Searched in: " + string.Join(",", result.SearchedLocations));
      viewResult.View = result.View;
    }
    var view = viewResult.View;
    var viewContext = new ViewContext(ControllerContext, view, viewResult.ViewData, viewResult.TempData, sw);
    view.Render(viewContext, sw);
    if (result != null)
      result.ViewEngine.ReleaseView(ControllerContext, view);
    return sw.ToString();
  }
}


だから、私のコントローラーでは:

    [HttpPost, ValidateInput(false)]
    public JsonResult Edit(/* stuff */) {
        bool success = true;
        try {
            /* stuff */         
        } catch {
            /* stuff */
            success = false;
        }
        return Json(new { success, result = RenderViewResultToString(/* stuff - call to something that gives a ViewResult */) });
    }


Chromeでは、「リソースはドキュメントとして解釈されますが、MIMEタイプapplication / jsonで転送されます」と表示されます。そして、ブラウザでJSONをテキストとしてレンダリングします。
Firefox / IEでは、ファイルをダウンロードするように求められます。

何ができますか?
答え
フォームの送信が抑制されていない。表示されるメッセージは、実際のフォーム送信からJSONを返すページへのものです。ブラウザのアドレスバーを確認すると、URLが異なっていることがわかります。

コンソールで$("#@containerId form")を実行すると、結果が得られないことがわかります。 「@」はセレクターでは無効な文字であり、エスケープする必要があります。 $("#\\@containerId form")は動作するはずです。
関連記事

css - asp.net mvc3 intellisenseがcssクラスに対して起動しない

c# - 1つのデータベースエントリの合計金額-MVC 3

asp.net-mvc - Html.ActionLinkがルート値を自動的に追加しないようにする

asp.net-mvc-3 - asp.net mvcファイルアップロードクライアント側バリデーター

c# - コントローラー内から部分ビューからHTMLを取得する方法

c# - ASP.NET MVC 3を使用したSQL ServerへのFileUpload

asp.net-mvc - TagBuilderで属性値のHTMLエンコードを無効にする

asp.net-mvc-3 - MVC3はアンカータグでビューを返すことが可能です

asp.net - Solrの使い方

asp.net - 最初にコードを使用すると、概念モデルとそれぞれの.edmxファイルが自動的に作成されますか?