Как направить объект используя asp -route-paramName - PullRequest
0 голосов
/ 16 апреля 2020

Я использую asp -route-paramName на мой взгляд:

<btn class="btn btn-danger" asp-action="ChangePrivacy" asp-controller="AdminManager"
     asp-route-to=@UserRolesTypeExtentions.IntValueAsString(@other)
     asp-route-userId=@userRoll.UserId >@other.ToString()</btn>

Я хочу передать enum контроллеру, чтобы преобразовать enum в int, а затем в string. Есть ли возможность передать объект типа enum или class (не string) в контроллер с помощью asp -route?

1 Ответ

0 голосов
/ 17 апреля 2020

Вот рабочая демонстрация, как показано ниже:

Модель:

public class Test
{
    public int UserId { get; set; }
    public ErrorCode Code { get; set; }
}
public enum ErrorCode
{
    None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}

Вид:

btn не поддерживает помощника по тегам. Вам необходимо используйте форму для вызова API:

@model Test

<form asp-action="TestEnum" asp-controller="Home" asp-route-to="@Model.Code">
    <input type="submit" class="btn btn-danger" value="PassEnum" />
</form>
<form asp-action="TestModel" asp-controller="Home" asp-all-route-data="@(new Dictionary<string, string> { { "to.Code", Model.Code.ToString() },{ "to.UserId",Model.UserId.ToString()} })">
    <input type="submit" class="btn btn-danger" value="PassModelWithEnum" />
</form>

Контроллер:

public IActionResult Index()
{
    //for easy testing,I set the value by default...
    var model = new Test()
    {
        UserId =1,
        Code = ErrorCode.OutlierReading
    };
    return View(model);
}
public IActionResult TestModel(Test to)
{
    return RedirectToAction("Index");
}
public IActionResult TestEnum(ErrorCode to)
{
    return RedirectToAction("Index");
}

Результат: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...