【问题标题】:Pass a list from get method (or from a view) to post method ASP .NET MVC将列表从 get 方法(或视图)传递到 post 方法 ASP .NET MVC
【发布时间】:2020-06-16 11:58:39
【问题描述】:

如果标题不是很清楚,我深表歉意。 所以,我想做的是跟随。 我有一个名为“类”的模型类,其中包含一个“学生”列表。我有一个显示学生清单的视图。从该清单中,我想将选定的学生传回控制器,在那里我将更新数据库,我的班级将有新学生,添加的学生将有一个新班级。

这是我到目前为止所做的,但现在我被卡住了。提前致谢。

这些是我的控制器操作

[HttpGet]
    public ActionResult AddStudents(int? id)
    {
        List<Student> students = (from std in db.Students
                                  where std.St_cl_fk_id == null select std).ToList();
        //ViewBag.students = students;

        return View("Add_Students",students);
    }
    [HttpPost, ActionName("AddStudents")]
    public ActionResult AddStudentsPost(int? id,List<Student> students)
    {
        if(ModelState.IsValid)
        {
            var temp = id;
            Class @class = db.Classes.Find(id);
            foreach (var item in students)
            {
                if (Request.Form[item.St_id.ToString()] != null)
                {
                    @class.Students.Add(item);
                }
            }
            db.Entry(@class).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index", "Classes");
        }
        return View("Add_Student");

    }

这是我的看法

@model IEnumerable<GMASchoolProject.Models.Student>
@{
  ViewBag.Title = "Add_Students";
 }


  <h4>Student List</h4>
  @using (Html.BeginForm())
  {
<div class="row">
    <div class="col-lg-8 col-lg-offset-2">
        <div class="panel panel-default">
            <div class="panel-heading">
                Check Students
            </div>
            <div class="form-group">
                <div class="col-md-10">
                    <table>
                        @foreach (var std in Model)
                        {
                            <tr>
                                <td><input type="checkbox" name="@std.St_id" value="@std.IsSelected" /></td>
                                <td>@Html.Label((string)std.St_name)</td>
                            </tr>
                        }
                    </table>
                </div>
            </div>
            <div class="form-group" style="margin:15px,0,15px,0;">
                <div class="col-md-offset-5 col-md-2">
                    <input type="submit" value="Add Students" class="btn btn-primary" />
                </div>
            </div>

        </div>
    </div>
</div>
}


<div>
 @Html.ActionLink("Back to List", "Index", null, new { @class = "btn btn-danger" })
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}

如果我做错了什么,请告诉我,我是这方面的新手。谢谢

【问题讨论】:

    标签: c# asp.net razor


    【解决方案1】:

    首先,不是将视图绑定到学生列表,而是将模型绑定到包含学生列表的 Class 对象。这样,当您提交(发布)时,您就是将整个模型对象发送到控制器中。

    更改您的 AddStudentsPost 方法以接收 Class 对象并在那里执行您的逻辑。

    最后,将“Class”对象的名称更改为其他名称,例如“Course”。类应保留给实际类,以免造成混淆。

    离你不远了,继续前进

    【讨论】:

    • 嘿@Co​​yMeeks 感谢您的建议。它们非常有帮助,我现在正在研究它们。我想出了如何按照这种技术解决我的问题。谢谢一百万。
    • 如果您不介意将我的标记为答案,那将关闭它。欢迎编码!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 2016-06-06
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    相关资源
    最近更新 更多