如何从一个动作方法中提取代码到helper中.asp.net MVC 3

本文关键字:取代码 提取 helper asp MVC net 方法 一个 | 更新日期: 2023-09-27 17:54:44

我使用Asp编写我的应用程序。asp.net MVC 3。在我的控制器中,除了一行代码之外,我还有两个具有相同代码的操作方法。

    [HttpPost]
    public ActionResult EditPost(Post post)
    {
        if (ModelState.IsValid)
        {
            _postsRepository.UpdatePost(post);
            return RedirectToAction("NewsFeed");
        }
        return View("EditPost", post);
    }
    [HttpPost]
    public ActionResult AddPost(Post post)
    {
        if (ModelState.IsValid)
        {
            _postsRepository.UpdatePost(post);
            return RedirectToAction("NewsFeed");
        }
        return View("AddPost", post); // the return view is different 
    }

因此,我想将所有这些代码提取到helper方法中。

我已经试过了:

1)我尝试将所有代码放入helper方法并作为参数传递ModelState。IsValid和视图名称。然后在AddPost和EditPost中,我调用这个助手方法,而不是上面列出的代码。下面是新的代码:

    [HttpPost] // also tried without this attribute
    public ActionResult HelperPost(Post post, string viewName, bool modelState)
    {
        if (modelState)
        {
            _postsRepository.UpdatePost(post);
            return RedirectToAction("NewsFeed");
        }
        return View(viewName, post);
    }
    [HttpPost] // also tried without this attribute
    public void AddPost(Post post)
    {
        HelperPost(post, "AddPost", ModelState.IsValid);
    }

EditPost代码几乎是相同的。视图名称为"EditPost"。

当我运行应用程序和AddPost方法执行验证工作和新帖子被创建,但这一行从未执行:

return RedirectToAction("NewsFeed");

所以我被重定向到"AddPost"视图一次又一次。

2)还试图重定向到helppost方法,而不是在AddPost和EditPost中调用它。结果仍然是一样的:似乎RedirectToAction("NewsFeed")没有执行。(这里我忽略了验证,只是为了简化示例,因为我必须创建具有属性的新模型:Post Post, string viewName, bool modelState)。代码:

[HttpPost] // tried without attribute
public void AddPost(Post post)
{
   return RedirectToAction("HelperPost", post);
}
[HttpPost] // tried without attribute
public RedirectToRouteResult HelperUpdatePost(Post post)
{
    _postsRepository.UpdatePost(post);
    return RedirectToAction("NewsFeed");
}

所以,我怎么能重构我的代码,所以我的动作方法(EditPost和AddPost)不会包含相同的代码块?

注。我需要AddPost和EditPost方法的不同视图,因为它们中的"返回内容"链接是不同的。我不能从AddPost方法重定向到EditPost视图。

提前感谢您的帮助!

如何从一个动作方法中提取代码到helper中.asp.net MVC 3

只需将"back to content"链接放在模型中,然后对两者使用相同的视图,然后您可以使用相同的HttpPost方法。

我会这样解决:

  1. 我会将方法实现撤回到单独的private中方法。此方法将由每个公共操作调用方法。由于两个方法的视图名称不同,我将传递将视图名作为私有方法的参数。
  2. 私有方法不需要HttpPostAttribute!不要忘记将Add和Edit动作方法声明为返回ActionResult !作为参数,他们只期望Post,视图名必须硬编码到动作methodsiteslf;-)