C# ASP MVC-在创建时从局部视图获取数据

C# ASP MVC-在创建时从局部视图获取数据,c#,asp.net,asp.net-mvc,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,我使用ASP.NETMVC5。 我有两个简单的班;学生和课程,就像这样 public class Student { public int Id { get; set; } public string Name { get; set; } } public class Course { public int Id { get; set; } public string Name { get; set; } public virtual ICollecti

我使用ASP.NETMVC5。 我有两个简单的班;学生和课程,就像这样

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Course
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Student> Students { get; set; }
}
公共班级学生
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
公共课
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection学生{get;set;}
}
我想创建一个新的
课程
,有许多学生可选择。 学生表单/视图将呈现为部分视图(在课程视图中)

现在我有一个创建视图,它的强类型是
课程
。 此视图只有一个文本框-课程的名称

我渲染强类型为
Student
的局部视图。 为了简化,我只想在列表中添加一名学生

我希望将学生数据传递给课程对象,然后“继续”传递给控制器


有人能帮我从局部视图传递数据的方法吗,或者给我一个在MVC中如何实现的提示吗?;)

您可以通过拥有多个局部视图来解决此问题

伪代码:

课程回顾:

<TextBox>@Model.Name</TextBox>
@foreach(var student in Model.Students)
{
  RenderPartial("ShowStudent");
}
RenderPartial("AddStudent");
@Model.Name
@foreach(模型中的var student.Students)
{
渲染部分(“ShowStudent”);
}
渲染部分(“添加学生”);
AddStudentView包含将学生保存到数据库所需的所有字段。在获取输入参数的操作中,保存新学生并将其重定向(类似于return RedirectToAction(“课程”,new{id=student.CourseId}))到课程视图。然后将加载课程视图,包括新学员


您也可以使用ajax来阻止回发,但由于您没有指定任何阻止回发的愿望,我认为这将是一个很好的解决方案。

好吧,找出我做错了什么。首先,我加载了Html助手BeginCollectionItem。如果您想动态添加和删除将添加到您的模型中的字段/文本框,这非常好

首先(从控制器)向视图发送一个空对象

我刚刚通过了一个新的课程对象。当然,Ctor会创建一个包含1个student对象的新列表

然后我使用RenderPartial显示partailview+学生项目

@foreach(var student in Model.Students)
{
  RenderPartial("_Student", student);
}
此视图如下所示:

public PartialViewResult NewStudentRow ()
{
    return PartialView("_Student", new Student());
}
@模型Project.Data.Entities.Student

<div class="AddStudent form-group">
    @using (Html.BeginCollectionItem("students"))
    {

    @Html.Label("Name:", new { @class = "control-label col-md-2" })
    <div class="col-md-8">
        @Html.TextBoxFor(x => x.Name)

        <button type="button" class="deletButton btn btn-default">Remove</button>
        @Html.ValidationMessageFor(model => model.Name)
    </div>
    }
</div>

如果您只使用

hmmm…,则非常简单Model.Student在我做“某事”之前总是空的。添加数据时循环列表感觉不正确。在验证课程实体之前,我不想向数据库中添加新学生。我正在使用ajax,是的。现在我做了一件愚蠢的事,我把一个空列表和一个新的学生对象传递给我的视图。稍后,我想添加通过java脚本动态添加文本框(=学生姓名)的功能。
public PartialViewResult NewStudentRow ()
{
    return PartialView("_Student", new Student());
}