代码之家  ›  专栏  ›  技术社区  ›  Kenzo_Gilead

如何在MVC 5中返回完整的表?

  •  0
  • Kenzo_Gilead  · 技术社区  · 8 年前

    我有一个表格,里面有一个表格,有输入和复选框。我用razor和HTML编码。当我按下提交按钮时,我希望收到标有复选框的行,或者默认情况下,收到带有更新字段的所有表。但我收到的是一个空列表或第一行(这取决于我的控制器实现)。如何实现?有什么想法吗?

    看法 :

    @model  List<Tuto2.Models.Peliculas>
    ....
    
    <div class="container">
        <h1>Lista de Peliculas</h1>
        @using(@Html.BeginForm("Edit", "Home", FormMethod.Post, new { enctype = "multipart/form-data"}))
        {
            <table class="table table-hover">
                <thead>
                    ....
                </thead>
                <tbody>
                    @for (var i = 0; i < Model.Count; i++)
                    {
                        <tr> 
                            <td>
                                <input type="checkbox" id="Code + @i" value="@Model[i].Code" />
                            </td>
                            <td>
                                <input class="pull-right" type="text" id="Titulo + @i" value="@Model[i].Titulo" />
                            </td>
                            <td>
                                <input class="pull-right" type="text" id="Genero + @i" value="@Model[i].Genero" />
                            </td>                    
                        </tr>
                    }
                </tbody>
                <tfoot>
                    ....
                </tfoot>
            </table>
        }
    </div>
    

    控制器:

    [HttpPost]
    public ActionResult Edit(List<Peliculas> c)
    {
        return View(Cartelera);
    }
    

    或:

    [HttpPost]
    public ActionResult Edit(Peliculas p)
    {
        return View(Cartelera);
    }
    

    任何小费都将不胜感激。

    谢谢

    2 回复  |  直到 8 年前
        1
  •  1
  •   Peter B    8 年前

    @Elias请使用以下几行,这将帮助您解决问题。

    [HttpGet]
    public ActionResult Edit()
    {
        List<Peliculas> list = new List<Peliculas>();
        list.Add(new Peliculas { Code = false, Genero = "Genero1", Titulo = "Titulo1" });
        list.Add(new Peliculas { Code = false, Genero = "Genero2", Titulo = "Titulo2" });
        list.Add(new Peliculas { Code = false, Genero = "Genero3", Titulo = "Titulo3" });
        list.Add(new Peliculas { Code = false, Genero = "Genero4", Titulo = "Titulo4" });
        return View(list);
    }
    
    [HttpPost]
    public ActionResult Edit(List<Peliculas> c)
    {
        return View(c);
    }
    

    <tr>
        <td>@Html.CheckBoxFor(m => Model[i].Code)</td>
        <td>@Html.TextBoxFor(m => Model[i].Titulo)</td>
        <td>@Html.TextBoxFor(m => Model[i].Genero)</td>
    </tr>
    
        2
  •  0
  •   Kenzo_Gilead    8 年前

    经过研究,只是为了你的知识。使用html标记返回选中int列表的另一种方法是为所有复选框指定相同的名称,并在控制器中收集它。获取已检查的int列表以及同一字段中每行的字符串列表。

    cshtml :

            <tbody>
                @for (var i = 0; i < Model.Count; i++)
                {
                    <tr> 
                        <td><input class="pull-right" type="checkbox" name="code" value="@Model[i].Code" /></td>
                        <td><input class="pull-right" type="text" name="titulo" value="@Model[i].Titulo" /></td>
                        <td><input class="pull-right" type="text" name="genero" value="@Model[i].Genero" /></td>                    
                    </tr>
                }
            </tbody>
    

    控制器

            [HttpPost]
            public ActionResult Edit(List<int> code, List<string> titulo, List<string> genero)
            {
                if (code != null)
                { 
                for (int i = 0; i < Cartelera.Count; i++)
                {
                    if (code.Contains(i))
                    {
                        Cartelera[i].Titulo = titulo[i];
                        Cartelera[i].Genero = genero[i];
                    }
                }
                }
                return View("List1", Cartelera);
             }