【发布时间】:2010-10-03 00:35:51
【问题描述】:
首先,一点上下文(因为我知道你们都喜欢它!):
我有一个名为 Note 的模型。它有一个名为 Type 的字段,在数据库中,它是一个整数值,用于指定该注释属于哪种类型的对象(1 = 客户,2 = 销售线索等)。第二个名为Source的字段指定此笔记所属的特定对象的ID。
例如,如果我想为客户 #34 添加注释,我会将 Type 设置为 1,将 Source 设置为 34。
为了让事情更易读,我有一个名为 DataObjectType 的枚举,它包含每个可能的 Type 整数值到友好名称的映射。因此,例如,DataObjectType.Customer 与 Type 字段中的值 1 相同。
接下来,我有一个自定义路线:
/Notes/New/{type}/{id}
还有两个控制器动作来处理新笔记的创建:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult New(DataObjectType type, int id) {
Note note = new Note { Type = type, Source = id };
return View(note);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Note note) {
// This is just an example
note.Persist();
return View("New", note);
}
首先,我需要确保提供给 {type} 路由值的值对于 DataObjectType 枚举有效。这可以通过路由约束来完成吗?目前,New() 的类型参数将接受任何整数,无论它是否存在于 DataObjectType 中。
其次,我需要确保用户尝试添加注释的对象在显示新注释表单之前确实存在于数据库中。我可以在 New() 方法中轻松地做到这一点,但有时用户可能会直接将数据发布到 Create() 而无需访问 New ()。在这种情况下,我还需要验证对象是否存在于 Create() 方法中。在不重复代码的情况下,在这两种方法中执行此操作的最佳方法是什么?
【问题讨论】:
标签: .net asp.net asp.net-mvc validation forms