我有一个两难的境地,我希望有人可以帮助我。在加载和更新页面的编辑获取阶段,在加载之前,我存储了像这样检查的复选框:
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。我的问题是如何让我在编辑获取阶段结束时创建的列表保持不变,以便我可以在帖子中使用它?
感谢任何想法。
答案 0 :(得分:1)
我会尝试尽可能简单。所以你的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
),但这应该让你去,很清楚看到发生了什么。