我一直在关注位于here
的Microsoft Contoso MVC3大学教程我对一个领域有疑问,在第6部分;本教程解释了如何创建一个课程表,可以使用复选框指定教师。特别是从“向教师编辑页面添加课程作业”标题开始
看起来过于复杂,是否有更有效的做事方式?插件/内置系统等 如果您想扩展系统,以便教师不仅仅有分配给他的课程,该怎么办?代码的重复将是巨大的。
InstructorController
// GET: /Instructor/Edit/5
public ActionResult Edit(int id)
{
Instructor instructor = db.Instructors
.Include(i => i.OfficeAssignment)
.Include(i => i.Courses)
.Where(i => i.InstructorID == id)
.Single();
PopulateAssignedCourseData(instructor);
return View(instructor);
}
private void UpdateInstructorCourses(string[] selectedCourses, Instructor instructorToUpdate)
{
if (selectedCourses == null)
{
instructorToUpdate.Courses = new List<Course>();
return;
}
var selectedCoursesHS = new HashSet<string>(selectedCourses);
var instructorCourses = new HashSet<int>
(instructorToUpdate.Courses.Select(c => c.CourseID));
foreach (var course in db.Courses)
{
if (selectedCoursesHS.Contains(course.CourseID.ToString()))
{
if (!instructorCourses.Contains(course.CourseID))
{
instructorToUpdate.Courses.Add(course);
}
}
else
{
if (instructorCourses.Contains(course.CourseID))
{
instructorToUpdate.Courses.Remove(course);
}
}
}
}
private void PopulateAssignedCourseData(Instructor instructor)
{
var allCourses = db.Courses;
var instructorCourses = new HashSet<int>(instructor.Courses.Select(c => c.CourseID));
var viewModel = new List<AssignedCourseData>();
foreach (var course in allCourses)
{
viewModel.Add(new AssignedCourseData
{
CourseID = course.CourseID,
Title = course.Title,
Assigned = instructorCourses.Contains(course.CourseID)
});
}
ViewBag.Courses = viewModel;
}
edit.cshtml
int cnt = 0;
List<UniversitySystem.ViewModels.AssignedCourseData> courses = ViewBag.Courses;
foreach (var course in courses)
{
if (cnt++ % 3 == 0)
{
@: </tr> <tr>
}
@: <td>
<input type="checkbox"
name="selectedCourses"
value="@course.CourseID"
@(Html.Raw(course.Assigned ? "checked=\"checked\"" : "")) />
@course.CourseID @: @course.Title
@:</td>
}
@: </tr>
}
</table>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
的ViewModels / AssignedCourseData.cs
public class AssignedCourseData
{
public int CourseID { get; set; }
public string Title { get; set; }
public bool Assigned { get; set; }
}
}
有效创建此屏幕的大量代码:
我想你可以概括一下InstructorController中使用的辅助方法,但这不是一项小任务。
CRUD系统似乎是处理一对多对多关系的基本组成部分;我很惊讶我无法找到有关该主题的信息。
TLDR:使用MVC3 / Entity框架将对象与其他对象关联的方法比上面显示的更好。
EDIT2: 这是一个快速Lightswitch应用程序的图像 候选人可以拥有与他们相关的许多技能,残疾和违法行为。如果我要实现这个系统的MVC版本,我将使用上面列出的x3代码来创建相同的效果。
当然有更有效的解决方案。
答案 0 :(得分:1)
根据您的评论,您似乎正在寻找MVC成为Lightswitch。如果是这种情况,微软就不会开发Lightswitch。
Microsoft提供了许多技术,MVC,Web页面(WebMatrix),WebForms,LightSwitch。每个人都有自己独特的优势和劣势,您可以选择最符合您要求的技术。
如果您正在开发MVC,则需要花费更多精力编写演示代码。但是,这种额外的努力使您在演示文稿的工作方式,外观和行为方面具有出色的灵活性。如果您不想这样做,那么我建议您选择其他技术。