1

コードをステップ実行するときに呼び出されていないビューがあります。コントローラーのアクションに到達してビューを返しますが、ビューをロードせず、現在のページにとどまります。

特定のページでボタンをクリックすると、次のページを呼び出す ajax 投稿が作成され、これは読み込まれません。

私のコントローラーアクションは次のようになります。

public ActionResult Comparison(int[] y)
        {
            CostModel.Getsuff(y);        

            return View(CostModel);
        }

私のルートマップは次のようになります。

routes.MapRoute(
        name: "Compare",
        url: "Category/Comparison/{*xxxx}",
        defaults: new { Controller = "Category", Action = "Comparison" }
       ).RouteHandler 

= new CategoriesRouteHandler(); 



public class CategoriesRouteHandler : IRouteHandler
        {
            public IHttpHandler GetHttpHandler(RequestContext requestContext)
            {
                IRouteHandler handler = new MvcRouteHandler();
                var vals = requestContext.RouteData.Values;
                var list = vals["xxxx"].ToString().Split(',');
                int[] y= new int[list.Length];
                for (int i=0; i < list.Length; i++)
                  int.TryParse(list[i].ToString(),out y[i]);

                vals.Add("y", y);
                return handler.GetHttpHandler(requestContext);
            }
        } 

私のアヤックス

  $.ajax({ 
       type: "POST", 
      url: '@Url.Action("Comparison", "Category",  new { Categories = "PLACEHOLDER"})'.replace('PLACEHOLDER', arr),
       dataType: "json", 
       traditional: true, 
       success: function(msg){alert(msg)} 
    } ); 

以前にトレースしたときに述べたように、それは ajax 呼び出しを正常に実行し、ビューを起動しないコントローラーでアクションを実行します。エリアがどこにも定義されていないという事実と関係があるのではないかと思いましたか?おそらくそれを捨てて、MVC 4のどこにも別の領域を指定することができませんが、私はMVCが初めてです。どんな助けでも大歓迎です。

4

2 に答える 2

4

以前にトレースしたときに述べたように、それは ajax 呼び出しを正常に実行し、ビューを起動しないコントローラーでアクションを実行します。

それがAJAXの要点です=>同じページにとどまります。現在のページを置き換えたい場合は、AJAX を使用しないでください。通常の を使用しますHtml.ActionLink

また、コントローラー アクションが a のみを返し、PartialViewページの一部のみを更新したい場合は、successコールバックでそれを行うことができます。

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("Comparison", "Category",  new { Categories = "PLACEHOLDER"})'.replace('PLACEHOLDER', arr),
    traditional: true, 
    success: function(result) {
        $('#someIdToRefresh').html(result);
    } 
}); 

dataType: 'json'また、コントローラー アクションが JSON を返さないため、削除したことにも注意してください。戻ってきtext/htmlました。

于 2012-08-17T12:41:02.247 に答える
1

アクション メソッドからは HTML (レンダリングされたビュー) が返されますが、Ajax 呼び出しでは応答の形式として JSON が想定されます。

応答が到着したときに例外がスローされていると思います。

于 2012-08-17T12:43:04.850 に答える