在MVC中使用javascript调用控制器方法

在MVC中使用javascript调用控制器方法,javascript,jquery,ajax,asp.net-mvc,Javascript,Jquery,Ajax,Asp.net Mvc,我试图使一个表行作为链接到我的mvc网站中的另一个视图。我不想使用自动生成的表列表提供的标准“Details”链接,而是想使用表行作为“Details”视图的链接。所以我需要让行作为链接工作。每个rom都有一个唯一的id,我需要将其传递给控制器方法。我尝试过不同的解决方案,但当我按下桌子上的一行时,什么都没有发生 <script type="text/javascript"> $(document).ready(function(){ $('#customers tr').c

我试图使一个表行作为链接到我的mvc网站中的另一个视图。我不想使用自动生成的表列表提供的标准“Details”链接,而是想使用表行作为“Details”视图的链接。所以我需要让行作为链接工作。每个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>
到目前为止,这就是我所拥有的:

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

<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 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);
}
你的代码中有一个输入错误

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

<script type="text/javascript">
$(document).ready(function(){
    $('#customers tr').click(function () {
        var id = $(this).attr('id');
        $.ajax({
            url: "Customer/Details" + id,
            succes: function () { }
        });
    })
})
</script>
  • 在操作和参数之间添加一个斜杠(
    /
    ):
    url:“Customer/Details/”+id
    ,否则,您将调用一个名为
    Details123
    操作
    
  • 确保在Global.asax中配置了路由,以支持
    id
    ,即
    Customer/Details/{id}
  • 就像@undefined所说的,回调的名称是
    success
    ,而不是
    succes
  • 您的
    Global.asax
    应该具有以下内容:

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

    我最近遇到了这种情况,并选择使用Ajax助手类:

    <script type="text/javascript">
    $(document).ready(function(){
        $('#customers tr').click(function () {
            var id = $(this).attr('id');
            $.ajax({
                url: "Customer/Details" + id,
                succes: function () { }
            });
        })
    })
    </script>
    
            @Ajax.ActionLink("Details", "Details", 
            new
            {
                id = Model.Id
            }, null)
    
    在本例中,它假设您想要一个显示“详细信息”的链接,并且您已经在客户控制器中

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

    无论哪种方式,如果您只想从链接触发控制器操作,就可以查看帮助器类,在如何传递/处理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>
    
    <tr data-id='@SomeRazorDataId' class="MyAction">foo</tr>
    
    如果您使用的是jQuery 1.7+,那么应该使用
    on()
    方法,而不是
    live()
    方法

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

    祝你好运

    您尝试调用的url无效:

    <script type="text/javascript">
    $(document).ready(function(){
        $('#customers tr').click(function () {
            var id = $(this).attr('id');
            $.ajax({
                url: "Customer/Details" + id,
                succes: function () { }
            });
        })
    })
    </script>
    
    “客户/详细信息”+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>
    
    相反,它应该是“Customer/Details&id=“+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>
    
    (或)

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

    <script type="text/javascript">
    $(document).ready(function(){
        $('#customers tr').click(function () {
            var id = $(this).attr('id');
            $.ajax({
                url: "Customer/Details" + id,
                succes: function () { }
            });
        })
    })
    </script>
    
    $.ajax({ url:“客户/详细信息”, 数据:{id:id}, 成功:函数(){}
    });

    谢谢!1.完成!2.完成!3.什么??如何?@ChristianThoressonDahl:你的Global.asax是什么样子?@ChristianThoressonDahl:请检查我的更新并添加新路线。在Global.asax中用新路线更新了我的帖子。仍然不起作用。我一定是做错了什么。。。在电脑前呆了几个小时后,如果这只是一件小蠢事,我也不会感到惊讶……:)@ChristianThoressonDahl:你的路线错了,它不是
    {controller}/{action}/{id}
    ,而是
    Customer/Details/{id}
    。谢谢:)通过简单地使用window.location=“Details/”+id就能工作;伟大的现在别忘了用指针设置行的样式:
    .MyAction{cursor:pointer;}
    。如果你需要进一步的帮助,请告诉我。
    <script type="text/javascript">
    $(document).ready(function(){
        $('#customers tr').click(function () {
            var id = $(this).attr('id');
            $.ajax({
                url: "Customer/Details" + id,
                succes: function () { }
            });
        })
    })
    </script>