Javascript MVC核心,如何检索列表对象之一的索引

Javascript MVC核心,如何检索列表对象之一的索引,javascript,asp.net-mvc,Javascript,Asp.net Mvc,对不起,我不清楚。这是我的代码,我希望能解释得更多 控制器: [HttpPost] public IActionResult Test(int classid) { return View(); } [HttpPost] public IActionResult Test(int classid) { // put debugger here so we know if we landed return new { succes

对不起,我不清楚。这是我的代码,我希望能解释得更多

控制器:

    [HttpPost]
    public IActionResult Test(int classid)
    {

        return View();
    }
[HttpPost]
public IActionResult Test(int classid)
{
    // put debugger here so we know if we landed
    return new { success=true};
}
视图:


@对于(int i=0;imodel[i].Name)
@Html.TextBoxFor(model=>model[i].ClassName)
}
$(文档).on(“单击”、“.MyButtonClass”函数(){
var id=$(this.data(“classid”);
警报(id);
$.ajax({
类型:“POST”,
url:“/StudentController/Test”,
数据:{classid:id}
});
});
所以我想做的是,当用户单击submit时,它将重定向到另一个包含类名信息的表单(我知道如何重定向到另一个页面),然而,问题是在另一个控制器中,我只能检索列表,而不能检索所选的索引类名。当用户单击“提交”时,是否有检索索引的方法


谢谢

我在下面给出了一个答案,希望能在路上帮助你

首先,在控制器中建立学生列表

 public class TestController : Controller
    {
        public ActionResult Test()
        {

            var list = new List<Student>()
            {
                new Student()
                {
                    Name = "Student1",
                    ClassID = 1,
                    ClassName = "ClassA"
                },
                new Student()
                {
                    Name = "Student2",
                    ClassID = 2,
                    ClassName = "ClassB"
                },
                new Student()
                {
                Name = "Student3",
                ClassID =3,
                ClassName = "ClassC"
                }
            };

            //You can call a service and populate your own data.

            return View("Test", list);
        }
    }
希望能有所帮助。

试试这个:

<div id="classList">

    @for (int i = 0; i < Model.Count(); i++)
    {
        var buttonid = "btnSubmit" + i;

        @Html.TextBoxFor(model => Model[i].Name)
        @Html.TextBoxFor(model => Model[i].ClassName)
        <button id="@buttonid" data-classid="@Model[i].ClassID" class="btn btn-default MyButtonClass">Go to class Form</butotn>

     }
</div>
<script>

    $(document).ready(function()
    {
        $(".MyButtonClass").on("click", function () 
        {

            var id = $(this).data("classid");
            console.log(id);

            $.ajax({
                type: "POST",
                url: "/StudentController/Test",
                data: { classid: id },
                success: function(data)
                {
                    // put redirect in here
                    window.location = .....;
                },
                error: function()
                {
                    // error handling
                }
            });

         });
    });//------- this was missing!!!!
</script>

您使用的是ajax post,因此您可能只希望返回数据,而不是整个视图。还是你呢?当你到达这里时,到底应该发生什么?

如果你将控件包装成一个表单并发布,你也可以发布到你想要的任何控制器/操作。@Wheels 73嗨,谢谢你的回答。是的,它被包装在一个表单中,问题是整个列表被发送到控制器,我不知道在哪个索引下单击了提交按钮您得到了整个列表,因为您的提交按钮在表单中,提交的默认操作是发布整个表单,尽管您的ajax函数试图只发布一个id,但您需要
preventDefault
或类似的方法来防止出现这种情况。我经常使用锚而不是按钮,它们看起来一样(因为引导),但更容易覆盖。@nurdyguy谢谢你的回答,但是你如何使用锚而不是按钮?就像锚用于发布链接一样,您实际如何使用它?是的,锚通常用于链接,但通过引导样式,您可以使锚看起来像普通按钮。试试这个
去上课表
你好,谢谢你的帮助。我试着调试和检查classId是否工作,但是,当我点击按钮时,什么也没发生,我只是用你的代码编辑了我的文章,介意帮我看看吗?非常感谢。真的很感激。早上好,我可以看到别人一直在帮助我。。。你把它整理好了吗?@wheels 74你好,谢谢你的回答。是和否你有什么解决办法吗?谢谢斯注意到你已经把你的剧本放在了表格的中间。将脚本块移动到页面的最底部。之后应该会有。在“开发人员工具”窗口打开的情况下尝试,看看是否有任何错误。此外,请尝试删除asp操作标记。我们现在通过ajax发布,所以不需要。非常感谢,刚刚尝试了这个,我删除了窗口。位置部分希望可以,我没有任何地方想重定向它。我将调试器放在那里,但它不会着陆:(我只想看到在那里检索classId,仅此而已。我正在处理另一个项目文件,该文件太大,无法共享,但概念相同。我是否需要在NuGet上安装任何东西?或者在Ajax/Json之前附加任何脚本?在浏览器中,打开“网络”选项卡,并告诉我当单击按钮。您需要jQuery,但是如果您没有在页面上加载,那么您将在控制台中看到一个大的红色错误“$未定义…”。我打开控制台时出现错误“未捕获语法错误:输入意外结束”。当我单击按钮时,网络选项卡不会显示任何内容。但加载时,它在那里有“测试”文档
  @for (int i = 0; i < Model.Count(); i++)
    {
        var buttonid = "btnSubmit" + i;

        @Html.TextBoxFor(model => Model[i].Name)
        @Html.TextBoxFor(model => Model[i].ClassName)
        <input name="submit" id="@buttonid" type="button" data-classid="@Model[i].ClassID" value="Go to class Form" class="btn btn-default MyButtonClass" style="font-size: 14px" />
        <br/>
    }
<style>

    .MyButtonClass {
        color:red;
    }

</style>
<script>

    $(document).on("click", ".MyButtonClass", function () {

        var id = $(this).data("classid");
        alert(id);

        $.ajax({
            type: "POST",
            url: "/YourController/YourAction",
            data: {classid:id}
        });

    });

</script>
    [HttpPost]
    public void YourAction (int classid)
    {

    }
<div id="classList">

    @for (int i = 0; i < Model.Count(); i++)
    {
        var buttonid = "btnSubmit" + i;

        @Html.TextBoxFor(model => Model[i].Name)
        @Html.TextBoxFor(model => Model[i].ClassName)
        <button id="@buttonid" data-classid="@Model[i].ClassID" class="btn btn-default MyButtonClass">Go to class Form</butotn>

     }
</div>
<script>

    $(document).ready(function()
    {
        $(".MyButtonClass").on("click", function () 
        {

            var id = $(this).data("classid");
            console.log(id);

            $.ajax({
                type: "POST",
                url: "/StudentController/Test",
                data: { classid: id },
                success: function(data)
                {
                    // put redirect in here
                    window.location = .....;
                },
                error: function()
                {
                    // error handling
                }
            });

         });
    });//------- this was missing!!!!
</script>
[HttpPost]
public IActionResult Test(int classid)
{
    // put debugger here so we know if we landed
    return new { success=true};
}