1

我在 ~/Helpers/Helpers.cs 中有以下内容:

namespace AdjusterSave.Helpers
{
    public class Helpers : Controller
    {
        // various methods such as the following...

        public void GetDropdowns()
        {
        }
    }
}

我试图在我的 ~/Controllers/AdjusterController.cs 文件中使用它们,如下所示:

using AdjusterSave.Helpers;

但是,在尝试使用这些方法时,我继续收到以下错误。当我这样称呼时:

GetDropdowns();

我收到此错误:

当前上下文中不存在名称“GetDropdowns”。

编辑:

尝试使用这样的方法(在 ~/Controllers/AdjusterController.cs 中):

public ActionResult ViewProfile()
{
    // a bunch of code like this:
    User user = db.Users.Where(x => x.username == HttpContext.User.Identity.Name).FirstOrDefault();

    AdjusterViewProfileInfo model = new AdjusterViewProfileInfo();

    // get name
    model.namePrefix = user.namePrefix;
    model.firstName = user.firstName;
    model.middleInitial = user.middleInitial;
    model.lastName = user.lastName;
    model.nameSuffix = user.nameSuffix;

    // end then, finally,

    GetDropdowns();

    // followed by...

    TempData["CurrentPage"] = "ViewProfile";

    return View("", _layout, model);
}

编辑:

GetDropdowns 示例:

public void GetDropdowns(this Controller controller)
{
    // get name prefixes
    List<SelectListItem> prefixList = new List<SelectListItem>();

    prefixList.Add(new SelectListItem { Value = "Mr.", Text = "Mr." });
    prefixList.Add(new SelectListItem { Value = "Mrs.", Text = "Mrs." });
    prefixList.Add(new SelectListItem { Value = "Ms.", Text = "Ms." });

    ViewBag.PrefixList = new SelectList(prefixList, "Value", "Text");

}
4

3 回答 3

4

你这样做是不对的。您需要做的是创建一个像这样的静态类:

public static class Helpers
{
    public static void GetDropdowns(this Controller controller)
    {
        // var username = controller.HttpContext.User.Identity.Name;

        // get name prefixes
        List<SelectListItem> prefixList = new List<SelectListItem>();

        prefixList.Add(new SelectListItem { Value = "Mr.", Text = "Mr." });
        prefixList.Add(new SelectListItem { Value = "Mrs.", Text = "Mrs." });
        prefixList.Add(new SelectListItem { Value = "Ms.", Text = "Ms." });

        controller.ViewBag.PrefixList = new SelectList(prefixList, "Value", "Text");

     }     
}

而且,您可以像这样在控制器中使用它:

this.GetDropdowns();
于 2013-07-15T14:31:52.867 回答
2

您可以使用扩展方法而不是从控制器继承:

public static class Helpers
{
    public static void GetDropdowns(this Controller controller)
    {
        // do something with the "controller", for sample:
        controller.ViewBag = new List<string>();
    }
}

您可以通过controller参数在控制器上访问的所有内容。

在您的控制器中,您可以执行以下操作:

public ActionResult Index()
{
    // just call it, and the .net framework will pass "this" controller to your extension methodo
    GetDropdowns();
}
于 2013-07-15T14:30:31.863 回答
2

如果你想调用 GetDropdowns() 你可以:

实例化 Helpers 并调用它:

new Helpers().GetDropdowns();

将方法 GetDropdowns 设为静态:

public static void GetDropdowns()
{
}

然后调用它:

Helpers.GetDropdowns();

你也可以从 Helpers 继承 AdjusterController:

public class AdjusterController : Helpers
{
}

然后像你一样调用它。一切都取决于你对什么感兴趣。我猜你不应该从 Controller 继承 Helpers 并使方法静态,但这只是一个猜测。

于 2013-07-15T14:33:12.350 回答