4

テーブルの行をmvcWebサイトの別のビューへのリンクとして機能させようとしています。自動生成されたテーブルリストによって提供される標準の「詳細」リンクを使用する代わりに、代わりに「詳細」ビューへのリンクとしてテーブル行を使用したいと思います。だからどういうわけか私は行をリンクとして機能させる必要があります。各ROMには、コントローラーメソッドに渡す必要のある一意のIDがあります。私はさまざまな解決策を試しましたが、テーブルの行を押すと注意が必要です...

これまでのところ、これは私が持っているものです:

<script type="text/javascript">
$(document).ready(function(){
    $('#customers tr').click(function () {
        var id = $(this).attr('id');
        $.ajax({
            url: "Customer/Details" + id,
            succes: function () { }
        });
    })
})
</script>

私のコントローラーメソッド:

public ActionResult Details(int id)
{
    Customer model = new Customer();
    model = this.dbEntities.Customers.Where(c => c.Customer_ID == id).Single();
    return View(model);
}

Global.asax:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
}

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

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }     
    );

    routes.MapRoute(
        "CustomerDetails",
        "Customer/Details/{id}",
        new { controller = "Customer", action = "Details", id = "" }
    );
}

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    // Use LocalDB for Entity Framework by default
    Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}
4

5 に答える 5

5

これが私がすることです:

<tr data-id='@SomeRazorDataId' class="MyAction">foo</tr>

その後:

$(document).ready(function(){
    $('.MyAction').live("click",function () {
        var id = $(this).attr('data-id');
        window.location = "Customer/Details/" + id;
    })
});

jQuery 1.7以降を使用している場合は、on()メソッドではなくメソッドを使用する必要がありますlive()

幸運を!

于 2012-09-01T22:28:33.990 に答える
3

コードにタイプミスがあります。

success:
//----^
于 2012-09-01T21:35:21.253 に答える
2

いくつかのこと:

  1. アクションとパラメーターの間にスラッシュ( )を追加します。それ以外の場合は、たとえば、存在しない呼び出された、を呼び出します。/url: "Customer/Details/" + idActionDetails123
  2. Global.asaxに、をサポートするように構成されたルートがあることを確認してください。idCustomer/Details/{id}
  3. @undefinedが言ったように、コールバックの名前はではsuccessなく、succesです。

あなたGlobal.asaxはこれらの線に沿って何かを持っている必要があります:

routes.MapRoute(
  "CustomerDetails",
  "Customer/Details/{id}",
  new { controller = "Customer", action = "Details", id = ""}
);
于 2012-09-01T21:39:53.647 に答える
1

私は最近この種の状況に陥り、Ajaxヘルパークラスを使用することを選択しました。

        @Ajax.ActionLink("Details", "Details", 
        new
        {
            id = Model.Id
        }, null)

この例では、「詳細」というリンクが必要であり、すでに顧客コントローラーにいると想定しています。

いずれにせよ、あなたがしたいのがリンクからコントローラーアクションを起動することだけである場合は、ヘルパークラスを見てください。これにより、id値の受け渡し/処理方法などに関してもう少し強い型付けが可能になります。

于 2012-09-01T22:01:06.707 に答える
0

呼び出そうとしたURLが無効です:

「顧客/詳細」+id、

代わりに、 「Customer / Details&id ="+id」である必要があります

(また)

'データ'を使用

$ .ajax({url: "Customer / Details"、data:{id:id}、succes:function(){}});

于 2012-09-20T08:06:40.510 に答える