如何将非模型字段发送回动作表单视图

时间:2014-02-25 20:16:33

标签: c# asp.net-mvc asp.net-mvc-5

我有一个视图,其中包含一个模型,其中包含我构建为复选框值的项目列表。如何将这些值发布回模型的操作?问题是没有具体数量的复选框,它们有时不知道该值是什么。根据用户的不同,可能有2个或者可能有15个。但是是根据模型的列表值构建的。提前致谢

1 个答案:

答案 0 :(得分:0)

您可以使用编辑器模板

假设您的视图/页面是为学生分配课程。所以你将有一个像这样的视图模型

public class AssignCourseVM
{
  public int StudentID { set;get;}
  public string StudentName { set;get;}
  public List<CourseRegistration> Courses { set;get;}
  public AssignCourseVM()
  {
    Courses =new List<CourseRegistration>();
  }
}
public class CourseRegistration
{
  public int CourseID { set;get;}
  public string CourseName { set;get;}
  public bool IsRegistered { set;get;}
}

现在,在您的 GET 操作中,您将创建一个viewmodel对象并发送到视图

public ActionResult Registration()
{
    var vm = new AssignCourseVM();

    //Student Info is hard coded. You may get it from db
    vm.StudentID = 1;
    vm.StudentName = "Scott";
    vm.Courses = GetCourseRegistations();
    return View(vm);
}
public List<CourseRegistration> GetCourseRegistations()
{
    var list = new List<CourseRegistration>();
    //Hard coded for demo. You may load this list from DB
    list.Add(new CourseRegistration { CourseID = 1, CourseName = "EN" });
    list.Add(new CourseRegistration { CourseID = 2, CourseName = "GE" });
    return list;
}

现在让我们创建一个编辑器模板,转到View/YourControllerName并创建一个名为 EditorTemplates 的文件夹,并在那里创建一个与属性类型同名的新视图({{1 }})。

enter image description here

现在在这个新文件中,粘贴此内容

CourseRegistration.cshtml

现在,在我们的@model ReplaceYourProjectNameSpaceHere.ViewModels.CourseRegistration <div> @Model.CourseName : @Html.CheckBoxFor(s=>s.IsRegistered) @Html.HiddenFor(s => s.CourseID) </div> 类强类型的主视图(Registration.cshtml)中,我们将使用AssignCourseVM辅助方法。

Html.EditorFor

现在,当用户发布表单时,您可以检查已发布的viewmodel的course属性,以查看是否选中了哪些项目。

@model ReplaceYourProjectNameSpaceHere.ViewModels.AssignCourseVM
<h2>Registration</h2>
@using(Html.BeginForm())
{
    <h4>@Model.StudentName</h4>
    @Html.EditorFor(s=>s.Courses)
    @Html.HiddenFor(s=>s.StudentID)
    <input type="submit" />
}

enter image description here