簡體   English   中英

如何將非模型字段發送回動作表單視圖

[英]How to send non model fields back to action form view

我有一個視圖,該視圖具有一個模型,其中包含作為復選框值構建的項目列表。 如何將這些值發布回模型的操作? 問題是沒有具體的數量f復選框,有時它們的值是未知的。 取決於用戶,可能有2個或有15個。 但是是根據模型的列表值構建的。 提前致謝

您可以使用編輯器模板

假設您的視圖/頁面是為學生分配課程。 所以你將有一個這樣的viewmodel

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操作中,您將創建視圖模型的對象並將其發送到視圖

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的文件夾,並在其中創建一個與屬性類型( CourseRegistration.cshtml )同名的新視圖。

在此處輸入圖片說明

現在,在此新文件中,粘貼此內容

@model ReplaceYourProjectNameSpaceHere.ViewModels.CourseRegistration
<div>
    @Model.CourseName : @Html.CheckBoxFor(s=>s.IsRegistered)
    @Html.HiddenFor(s => s.CourseID)
</div>

現在,在強類型AssignCourseVM類的主視圖( Registration.cshtml )中,我們將使用Html.EditorFor helper方法。

@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" />
}

現在,當用戶發布表單時,您可以檢查發布的viewmodel的course屬性,以查看是否檢查了哪些項目。

[HttpPost]
public ActionResult Registration(AssignCourseVM model)
{
    //to do :save and redirect
    return RedirectToAction("RegistrationSuccessfull");
}

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM