我正在开发一个处理表单/文档的 Controller ,随着任务的推进,我在方法中看到的代码重复部分越多。无论是否使用 mvc,这都是我的第一个 ASP
应用程序,我不确定优化代码的最佳方法是什么。我注意到的东西 - 重复多次的模式是这样的:
public ActionResult DisplayForm(int? documentId, long status)
{
ViewBag.Status = status;
List<MCS_DocumentFields> model = (List<MCS_DocumentFields>)DocumentFieldService.GetFieldsForDocument(documentId);
var finalModel = model
.OrderBy(c => c.ContentTypeId)
.ThenBy(c => c.RowNo)
.ThenBy(c => c.ColumnNo)
.ThenBy(c => c.MCS_Fields.Order)
.ToList();
return View(finalModel);
}
这是一种显示某种形式的方法。但是当编辑表单时,我用另一种方法处理这个问题:
public ActionResult UpdateDocument(List<MCS_DocumentFields> collection)
{
//TODO deal with the repeating code
int? documentId = (int)collection[0].MCS_Documents.Id;
ViewBag.Status = 1;
List<MCS_DocumentFields> model = (List<MCS_DocumentFields>)DocumentFieldService.GetFieldsForDocument(documentId);
var finalModel = model
.OrderBy(c => c.ContentTypeId)
.ThenBy(c => c.RowNo)
.ThenBy(c => c.ColumnNo)
.ThenBy(c => c.MCS_Fields.Order)
.ToList();
//var ts = collection;
return View("DisplayForm", finalModel);
}
我必须实现数据验证和更新的逻辑,但最后我想显示相同的 View - 包含新数据的已编辑表单和一些正确的消息,如“保存成功”或类似的消息。
所以我想知道我能在这里做什么 - 在我的 Controller 中编写一些私有(private)方法,我会在需要的地方调用这些方法。也许有办法...如示例中所示 - 在 UpdateDocument
方法中处理保存,然后 UpdateDocument
返回 DisplayForm
方法。 .我不确定。
最佳答案
在不了解您的应用程序的更多信息的情况下,我建议您尽可能在 DocumentFieldService.GetFieldsForDocument 方法中进行排序。
如果你做不到,你可以这样做:
public List<MCS_DocumentFields> GetSortedFieldsForDocument(documentID)
{
List<MCS_DocumentFields> model = (List<MCS_DocumentFields>)DocumentFieldService.GetFieldsForDocument(documentId);
var sorted = model
.OrderBy(c => c.ContentTypeId)
.ThenBy(c => c.RowNo)
.ThenBy(c => c.ColumnNo)
.ThenBy(c => c.MCS_Fields.Order)
.ToList();
return sorted;
}
作为你所说的私有(private)方法,你可以这样做:
public ActionResult DisplayForm(int? documentId, long status)
{
ViewBag.Status = status;
return View(GetSortedFieldsForDocument(documentId));
}
和
public ActionResult UpdateDocument(List<MCS_DocumentFields> collection)
{
//TODO deal with the repeating code
int? documentId = (int)collection[0].MCS_Documents.Id;
ViewBag.Status = 1;
return View("DisplayForm", GetSortedFieldsForDocument(documentId));
}
在你的 Controller 中。
关于c# - 处理 asp.net mvc 3 Controller 中的重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16771930/