Вызов действия HomeController с внедрением зависимости от Razor Page Model - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть действие в HomeController с Dependency Injecttion в Asp.Net Core 2.1.0 Razor Page.

Код действия

    private readonly Test.Data.MyContext _Context;

    public HomeController(Test.Data.MyContext context)
    { _Context = context; }

    [HttpGet]
    public ActionResult TypeofAccounts(string at)
    {
        var result = _Context.TypeOfAccounts
            .Where(x => x.AccountType == at)
            .Select(x =>
                new
                {
                    label = x.AccountType,
                    id = x.AccountType
                }
            );

        return Json(result);
    }

Я хотел бы использовать этот результат в различных Razor PageModel.Как я могу достичь.Вот пример страницы Razor.

public class IndexModel : PageModel
{
    private readonly Test.Data.MyContext _Context;
    public IndexModel(Test.Data.MyContext context)
    { _Context = context; }

    public void OnGet()
    {
        // Here I want bind HomeController's action.
    }
}

Я пробовал с var ta = new Test.Controllers.HomeController().TypeofAccounts("B001");, но не повезло.

1 Ответ

0 голосов
/ 19 сентября 2018

Хотя я не знаком с практикой использования экземпляра контекста данных как в модели представления, так и в контроллере, вы можете попробовать этот способ.

Контроллер:

private readonly Test.Data.MyContext _Context;

public HomeController(Test.Data.MyContext context)
{ _Context = context; }

[HttpGet]
public ActionResult TypeofAccounts(string at)
{
    var result = GetTypeOfAccounts(_Context, at);

    return Json(result);
}

public static IQueryable<dynamic> GetTypeOfAccounts(Test.Data.MyContext context, string at)
{
    var result = context.TypeOfAccounts
        .Where(x => x.AccountType == at)
        .Select(x =>
            new
            {
                label = x.AccountType,
                id = x.AccountType
            }
        );

    return result;
}

Просмотреть модель:

public class IndexModel : PageModel
{
    private readonly Test.Data.MyContext _Context;
    public IndexModel(Test.Data.MyContext context)
    { _Context = context; }

    public void OnGet()
    {
        // Here I want bind HomeController's action.
        var ta = Test.Controllers.HomeController.GetTypeOfAccounts(_Context, "B001");
    }
}
...