Warm tip: This article is reproduced from serverfault.com, please click

c#-有2个不同的IActionResults,一个带参数,一个不带参数

(c# - Have 2 Different IActionResults, one with a parameter and one without a parameter)

发布于 2020-11-30 11:14:27

我想要这样的不同IActionResults。

[HttpGet]
public IActionResult CreateTournament()
    {
        ViewData["Creator"] = "User";
        TournamentDTO tournamentDTO = new TournamentDTO()
        {
            OrganisationID = "null",
        };
        return View();
    }

[HttpGet]
public IActionResult CreateTournament(string OrganisationID)
    {
        ViewData["Creator"] = "Org";
        TournamentDTO tournamentDTO = new TournamentDTO()
        {
            OrganisationID = OrganisationID,
        };
        return View();
    }

但是,当我尝试导航到此页面时,它给出了一个错误

AbiguousMatchException:请求匹配了多个端点。匹配项:F4DEDTournaments.Controllers.TournamentController.CreateTournament(F4DEDTournaments)F4DEDTournaments.Controllers.TournamentController.CreateTournament(F4DEDTournaments)

是否可以将两个代码块都置于相同的方法中,从而解决此问题?

[HttpGet]
public IActionResult CreateTournament(string OrganisationID)
    {
        if( OrganisationID == string.empty)}
        {
            ViewData["Creator"] = "User";
            TournamentDTO tournamentDTO = new TournamentDTO()
            {
                OrganisationID = "null",
            };
            return View();
        } else {
            ViewData["Creator"] = "Org";
            TournamentDTO tournamentDTO = new TournamentDTO()
            {
            OrganisationID = OrganisationID,
            };
            return View();
        }
    }
Questioner
Tijn van Veghel
Viewed
0
user11646156 2020-11-30 19:23:38

默认情况下,动作参数是可选的,所以我更喜欢一种方法:

[HttpGet]
public IActionResult CreateTournament(string OrganisationID)
    {
        ViewData["Creator"] = OrganisationID == null? "Org" : "User";
        TournamentDTO tournamentDTO = new TournamentDTO()
        {
            OrganisationID = OrganisationID == null? "null" : OrganisationID
        };
        return View();
    }