c# - 处理 asp.net mvc 3 Controller 中的重复代码

标签 c# asp.net-mvc-3

我正在开发一个处理表单/文档的 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/

相关文章:

c# - 在 C# 中呈现 MediaWiki 的最佳方法?

c# - 为什么 Response.Redirect 不重定向外部 URL?

c# - Windows Phone 7 中的列表框项目

c# - 可以让 Python 向 C# 发送一个可变长度的字符串数组吗?

model-view-controller - MVC Controller 索引有时是 404?

jquery 表单发布了两次

asp.net-mvc - 将 Font Awesome 图标设置为文本框

c# - CrossGeolocator 的 GetPositionAsync 不起作用

c# - 如何从 View 模型发布对象?

asp.net-mvc-3 - 第一页加载缓慢 - ASP.NET MVC