当前位置: 首页 > 知识库问答 >
问题:

将代码移出控制器并移入中的帮助器方法类的最佳方法是什么。网芯

严修诚
2023-03-14

如何将重复的代码段从控制器移到助手方法类中,而不必在中重复代码。净核心?请让我知道,如果我需要提供更多的细节。

我需要将任何重复的代码部分移出这个控制器,这样我就可以在需要它的其他控制器中调用这个方法

用户控制器:

using myApp.Data;
using myApp.Models;
using myApp.Models.ViewModels;
using myApp.Utilities;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
    
namespace myApp.Controllers
{
    [Authorize]
    public class UserController : Controller
    {
        private readonly ApplicationDbContext db;
        private readonly UserManager<ApplicationUser> userManager;
  
        public UserController(  ApplicationDbContext db,
                        UserManager<ApplicationUser> userManager)
        {
            this.db = db;
            this.userManager = userManager;
        }
    
        [HttpGet]
        public async Task<IActionResult> UpdateUserDetails(UpdateUserViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = await userManager.FindByIdAsync(model.Id);

                if (user == null)
                {   
                    //Calling Repeated Code in this controller
                    return UserNotFound();
                }
                else
                {
                    user.FirstName = model.FirstName;
                    user.LastName = model.LastName;
                    user.UserName = model.UserName;
                    user.PhoneNumber = model.PhoneNumber;
                }

                var result = await userManager.UpdateAsync(user);

                if (result.Succeeded)
                {
                    //Calling Repeated Code in this controller
                    return UpdateSuccess();
                }

                AddErrors(result);
            }

            return View(model);
        }
            
        //REPEATED CODE SECTION BEGINS (Extracted out of UpdateUserDetails Controller)
        public IActionResult UserNotFound()
        {
            TempData[HelperStatic.ErrorMessage] = HelperStatic.userNotFoundMsg;
            return View(HelperStatic.notFoundView);
        }
        
        public IActionResult UpdateSuccess()
        {
            TempData[HelperStatic.SuccessMessage] = HelperStatic.recordUpdatedMsg;
            return RedirectToAction(nameof(Index));
        }

        //REPEATED CODE SECTION ENDS
   }
}

项目中已存在仅具有静态常量的静态帮助器类。

在上述控制器中使用的静态帮助器类:

namespace myApp.Utilities
{
    public static class HelperStatic
    {
        // Messages
        public const string SuccessMessage = "Success";
        public const string ErrorMessage = "Error";
        public const string userNotFoundMsg = "User not found";
        public const string recordUpdatedMsg = "Record updated";

        // Views
        public const string notFoundView = "NotFound";
    }
}

我需要一个不同的HelperMethod类和可重用的动作方法。我如何做到这一点?

共有1个答案

邢财
2023-03-14

创建一个控制器基类,并将所有实用程序方法移入其中,而不是帮助类。

public class BaseController : Controller
{
    public IActionResult UserNotFound()
    {
        TempData[HelperStatic.ErrorMessage] = HelperStatic.userNotFoundMsg;
        return View(HelperStatic.notFoundView);
    }

    public IActionResult UpdateSuccess()
    {
        TempData[HelperStatic.SuccessMessage] = HelperStatic.recordUpdatedMsg;
        return RedirectToAction(nameof(Index));
    }
}

你可以这样使用它。

public class HomeController : BaseController
{
    public IActionResult Index()
    {
        UserNotFound();
        return View();
    }
}
 类似资料:
  • 问题内容: 有没有可靠的方法来检测用户是否在jQuery中使用移动设备?类似于CSS @media属性吗?如果浏览器在手持设备上,我想运行其他脚本。 jQuery 函数不是我想要的。 问题答案: 编者注: 对于现代Web应用程序,不建议使用用户代理检测技术。请参阅此答案下方的评论以确认这一事实。建议使用特征检测和/或媒体查询来使用其他答案之一。 除了使用jQuery,您还可以使用简单的JavaSc

  • 问题内容: 我需要将数据库从sqlite迁移到mysql,并且各种工具/脚本对我来说太多了,无法轻松找到最安全,最优雅的解决方案。 在我看来,这看起来不错http://djangosnippets.org/snippets/14/,但距获取更新令人担忧,似乎已经过去了三年。 您是否可以推荐一个在Django 1.1.1上可靠的解决方案? 问题答案: 执行: 接下来,将你的settings.py更改

  • 问题内容: 是什么使应用程序功能的模块/服务/位成为OSGi模块的特别好的候选者? 我对在我的应用程序中使用OSGi感兴趣。我们是一家Java商店,我们广泛使用Spring,因此我倾向于将Spring动态模块用于OSGi(tm)服务平台。我正在寻找一种将OSGi一点点集成到应用程序中作为试用的好方法。这里有人使用过此技术或类似的OSGi技术吗?有陷阱吗? @Nicolas-谢谢,我已经看过那个了。

  • 问题内容: 复制列表的最佳方法是什么?我知道以下方法,哪种更好?还是有另一种方法? 问题答案: 如果要浅拷贝(不复制元素),请使用: 如果要进行深层复制,请使用复制模块:

  • 问题内容: 在Clojure中制作 GUI的最佳方法是什么? 有一些功能性Swing或SWT包装器的示例吗?还是与JavaFX声明性GUI描述进行了某些集成,可以使用某些宏轻松地将它们包装到s表达式中? 有教程吗? 问题答案: 我会谦虚地建议跷跷板。 这是一个基于REPL的教程,假定您没有Java或Swing知识。 跷跷板很像@tomjen的建议。这是“你好,世界”: 这是@Abhijith和@d

  • 问题内容: 我将使用C / C ++,并想知道与MySQL服务器对话的最佳方法。我应该使用服务器安装随附的库吗?除了官方图书馆外,我还应该考虑其他优秀的图书馆吗? 问题答案: MySQL ++

  • 问题内容: 我正在使用许多静态HTML网站管理旧版网站,没有服务器端脚本,只有纯HTML / CSS,最少的javascript。我发现,在不同页面中多次更改同一段代码非常浪费时间。例如,当菜单中的某些内容发生更改时,由于菜单只是每个文档中的静态文本,因此我必须多次进行相同的更改。 我想知道什么是最好的策略,以最大程度地减少这种开销,换句话说,对于跨多个静态HTML页面管理导航代码之类的建议,您会

  • 问题内容: 我的网站最近遭到了一个无辜的代码的攻击: 那里没有SQL调用,因此我不担心SQL注入。但是,显然,SQL并不是唯一的注入方式。 该网站提供了解释以及避免代码注入的一些示例:http : //www.theserverpages.com/articles/webmasters/php/security/Code_Injection_Vulnerabilities_Explained.ht