我有一个困境,我希望有人能帮助我。在加载和更新页面之前的Edit Get阶段,我像这样存储选中的复选框:
foreach (var course in courses.Select((x, i) => new { Data = x, Index = i }))
{
@: <td>
<br /><br /><br />
<input type="checkbox" id="checkbox" name="selectedCourses" value="@course.Data.CourseID"
@(Html.Raw(course.Data.Assigned ? "checked="checked"" : "")) />
</td>
bool theNewString = course.Data.Assigned;
String a = theNewString.ToString();
assignedCourses.Add(a);
}
在视图的顶部,我定义了列表来存储这样的数据,以便我可以在BeginForm:
中发送数据@{ List<String> assignedCourses = new List<String>(); }
然后我试着像这样把列表发送到Edit POST:
@using (Html.BeginForm(new { assigned = assignedCourses }))
在我的控制器签名是这样的:
[HttpPost]
public ActionResult Edit(int id, List<String> assigned)
在get阶段结束时加载列表,但列表中的数据不经过Edit POST。我的问题是我如何得到我在编辑阶段结束时创建的列表,以便我可以在我的帖子中使用它?
谢谢你的建议
我会尽量让它变得简单。所以你的Course
模型是这样的…
public class Course
{
public int Id { get; set; }
public string Name { get; set; }
public bool Assigned { get; set; }
}
…您希望在屏幕上显示一些保存的值以进行编辑。因此,从控制器开始,我设置了一些数据,并将Assigned
中的一个布尔值设置为true
,以便在页面加载时检查它。
public Controller Courses
{
public ActionResult Edit(int id)
{
var courses = new Course[] {
new Course() { Id = 1, Name = "maths", Assigned = true },
new Course() { Id = 2, Name = "english", Assigned = false },
new Course() { Id = 3, Name = "science", Assigned = false }
};
return View(courses);
}
现在,您的页面应该期望这些课程的集合,所以在页面的顶部定义View
期望的类型…
cshtml
@model IEnumerable<ExampleProject.Domain.Course>
…然后你可以在你的View
中枚举它们并创建你的复选框。
@using (Html.BeginForm("Edit", "Courses", FormMethod.Post))
{
@foreach(var item in Model)
{
<label for="@item.Id">@item.Name</label>
<input type="checkbox" name="courses" id="@item.Id" value="@item.Id" checked="@item.Assigned" />
}
<button type="submit">Save changes</button>
}
这将呈现以下html:
<label for="1">maths</label>
<input type="checkbox" name="courses" id="1" value="1" checked="checked">
<label for="2">english</label>
<input type="checkbox" name="courses" id="2" value="2">
<label for="3">science</label>
<input type="checkbox" name="courses" id="3" value="3">
现在你可以检查你喜欢什么并提交你的表单。在真正的http方式中,控制器动作将接收View
上检查的值:
[HttpPost]
public ActionResult Courses(int id, int[] courses)
{
// courses will contain the values of the checkboxes that were checked
return RedirectToAction("Index"); // etc
}
希望这有帮助。您可以更聪明一点,使用Html帮助程序来完成一些更复杂的绑定(例如:Html.CheckBox
, Html.CheckBoxFor
),但这应该让你继续,并清楚地看到发生了什么