2016-03-30 13 views
0

私は、これがどのように動作しているかを判断しようとしています。任意の部分図のようになりますようAjax MVCで部分的なビューを返す5

public ActionResult AddPerson() 
    { 
     return PartialView("_AddPerson"); 
    } 

_AddPerson.cshtmlが私の見解である/共有フォルダ:私にHomeControllerでこののActionResultで

function addPerson() { 

    $.ajax({ 
     dataType: "html", 
     url: '@Url.Action("AddPerson")', 
     success: function (data) { 
      $('#Detail').hide(); 
      $('#Detail').html(data); 
     }, 
     error: function() { 
      $('#Detail').html("<h3>Couldn't do that</h3>"); 
     } 
    } 
    ); 

私はAjaxの私にHomeControllerに電話を持っています。

私がしようとしているのは、メインビューのdivに部分ビューのhtmlを追加することです。 IntelerenseはAddPersonのアクションでピックアップしますが、私が実行すると機能が呼び出されたときにこのエラーが発生します:

"リソースの読み込みに失敗しました:サーバーが404のステータスで応答しました(見つかりません)http://localhost:45003/Home/AddPerson"

私は実際には、以前のように部分的なビューを返す以外のことを行うためにコントローラにデータを渡していたという唯一の違いによって、この呼び出しを以前から行ってきました。私は間違ったことをやっているのですか、それとも私が達成しようとしている機能性は可能ではありませんか?

編集:私のRouteConfigそれは重要な場合:

$('#Detail').load(
     '<%= Url.Action("AddPerson", "Home") %>' 
); 
+0

私はViewEngineがビューの名前を理解したいので、通常は 'View()'や 'PartialView()'に文字列を渡しません。あなたの場合、 '_Addperson.cshtml'という名前のビューがありますか? –

+0

ええ、そうです。それはホームフォルダではなく共有フォルダにありますが、私の現場では問題ではないので、どうしてそれがどうなるか分かりません。 Ajaxの呼び出しは失敗し、デフォルトでerror関数が呼び出されますが、ActionResultは呼び出されません。なぜ私の人生は分からない。 – StolenSheep

+0

'AddPerson()'メソッドは 'HomeController'にあり、あなたはデフォルトのルートテーブルを編集しておらず、あなたは権限を持っていませんか? –

答えて

0

誰もがこれを発見し、鉱山と同様の問題が発生した念のため、私は新しいプロジェクトを作成し、そこにまったく同じコードを置くことによってそれを解決しました。 ITは意図したとおりに動作します。

元のプロジェクトで何が原因で発生したのかはわかりませんが、問題を解決するのに役立ちます。

0

をAJAX呼び出しを使用して、あなたは次のようにそれを使用することができます。生成されたURLを@Url.Action("AddPerson")から確認してください。 AddPersonを定義するコントローラと同じルートにいると確信していますか?コントローラーパラメーターをUrl.Actionまたは領域名に追加する必要があります。

url: '@Url.Action("AddPerson", "controllerName"' 

または

url: '@Url.Action("AddPerson", "controllerName", new { area = "areaName" })' 
1

それは魅力のように動作するはずです:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
+0

私は両方を試みましたが役に立たなかった。これは私のRouteConfigです: 'public static void RegisterRoutes(RouteCollection routes){routes.IgnoreRoute(" {リソース} .axd/{* pathInfo} ");デフォルト:new {controller = "Home"、action = "Index"、id = UrlParameter.Optional}); routes.MapRoute(名前: "Default"、url: "{コントローラ}/{アクション}/{id} } ' AddPersonは間違いなくHomeControllerにありますので、私は何が間違っているのか分かりません。 – StolenSheep

+0

@ user2966419あなたはどんな種類の属性でも 'AddPerson'を装飾していませんでしたか? 'HttpPost'のように? –

+0

@ user2966419コメントで質問を更新しないでください。質問の編集をクリックして、関連する情報を追加してください。 –