2017-01-13 1 views
0

私はasp.net-mvcでNancyフレームワークを使用しています。様々なビューの中から、私は、各コントローラモジュールのエンドポイントを複製する必要はなく、これまでに失敗しているのではなく、ajax/getJSON経由で共通のモジュールからメソッドを呼び出せるようにしたいと考えています。どのようにajaxから共通のコントローラメソッドを呼び出すのですか?

は私のコントローラモジュールは、次のようになりますと仮定します。

function callMethod() 
{ 
    var someargument = $('#SomeControl').data('somedata'); 
    var url = window.location.protocol + '/' + window.location.host + '/CommonModule/EndpointName/' + someargument; 
    $.getJSON(url, function (json) { 
     //process if/as required; 
    }) 
    .done(function (info) { 
     //process if/as required; 
    }) 
    .fail(function (jqxhr, textStatus, error) { 
     //process if/as required; 
    }); 

} 

これが可能である:私のjsファイル内の

namespace SomeNamespace 
{ 
    using Microsoft.EntityFrameworkCore; 
    using Models; 
    using Nancy; 

    public class CommonModule : NancyModule 
    { 
     public CommonModule(IAppRepository repo) 
     { 
      Get("/EndpointName/{someargument}", async (x, ct) => 
      { 
       string result = string.Empty; 
       int someargument; 
       if(int.TryParse(x.apptype, out someargument)) 
       { 
        var data = await repo.SomeModel.AsNoTracking().ToListAsync().ConfigureAwait(false); 
        result = Response.AsJson(data); 
       } 

       return result; 

      }); 

     } 
    } 
} 

、私のようなものを持っているだろうか?もしそうなら、これはどのように行われますか?私はちょうど間違ってURLを構築していますか、それは正しい参照が.cshtmlファイルに存在することを保証することと関係していますか?

$('#CommonModulebtn').click(function() { 

$.ajax({ 
    url: '/CommonModule/CommonModule', 
    type: "GET", 
    dataType: "JSON", 
    data: { IAppRepository : $('#SomeControl').data('somedata').val() }, 
    success: function (info) {} 

答えて

1

のようなものを試してみてください。あなたのコードは問題ありません。正しいURLを作成する必要があります。

私はNancyFxルーティングに精通していないですが、私はあなたが好きに見えるように、URLから「CommonModule」を削除する必要があると思います:それは、共通のモジュールである場合は、変更することがあり

var url = window.location.protocol + '/' + window.location.host + '/EndpointName/' + someargument; 

サーバー上のルート:

public CommonModule(IAppRepository repo) 
{ 
    Get("/common/EndpointName/{someargument}", async (x, ct) => ... 

とJavaScriptでURLが

var url = window.location.protocol + '/' + window.location.host + '/common/EndpointName/' + someargument; 
になります
1
function callMethod() { 
    $.ajax({ 
     url: "/CommonModule/CommonModule", 
     type: "GET", 
     data: $("#IDFORM").serialize(), 
     dataType: "json", 
     success: function (data, textStatus, jqXHR) { 
      alert("ok"); 
     }, 
     error: function (data) { 
      alert("error"); 
     } 
    }) 
} 
1

あなたはあなたのアプリケーション内で任意のコントローラビューから任意のコントローラのアクションを呼び出すことができます。

関連する問題