. net mvc html справка ActionLink и параметры для класса контроллера - PullRequest
0 голосов
/ 09 июля 2020

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

есть все, что я считаю, на месте, но не могу настроить / ссылаться на параметр в помощнике actionlink ...

Да, я буду проводить рефакторинг моей кнопки onclick, как только прохожу через эту html вспомогательную настройку ...

        <h1 style="font-size:30px">Enter The Core-i Product Key (format RST 102A08R EPCA 00007)</h1>

        <form action="/action_page.php">
            <label for="productKey">Product Key:</label>
            <input type="text" id="productKey" name="productKey"><br><br>
        </form>

        <p>Click the "Get Key" button and a trial key will be generated custom to your IBMi hardware".</p>

        <p>
            @Html.ActionLink(
              "Get Key",
              "GetTrialKey",                 // controller action
              "HomeController",              // controller
              new { productKey },            // IT DOES NOT LIKE PRODUCTKEY (REFERENCED ABOVE)
              new { @class = "btn btn-info" }) // html attributes
        </p>


        <div class="display-2">
            <a button class="text-center, btn btn-info form-control text-white" typeof="button" onclick="location.href='@Url.Action("GetTrialKey(productKey)")'">Get Key</button></a>
            <p>
                <br />
            </p>
        </div>

преобразован в ...

view ...

    <form action="HomeController/getTrialKey" method="POST">
        <label for="productKey">Product Key:</label>
        <input type="text" name="productKey" maxlength="22" value="xxx xxxxxxx xxxx xxxxx"><br><br>
        <input type="submit" value="Get Trial Key" class="btn btn-primary" />
    </form>

контроллер ...

        [HttpPost]
        public async Task<IActionResult> getTrialKey(string productKey)
        {

когда я запускаю его, я получаю ...

Эта страница localhost не может быть найдена Веб-страница не найдена для веб-адрес: https://localhost: 44346 / HomeController / getTrialKey

1 Ответ

1 голос
/ 10 июля 2020

Возвращаясь к одному из комментариев:

Я не отговаривал вас от использования HTML Помощников. Я просто имел в виду то, как вы построили форму и использовали ActionLink, неправильно. И было бы проще просто ввести ключ продукта внутри формы, если это единственное, что вы хотите отправить обратно на сервер.

И я очень рекомендую вам прочитать документацию от Microsoft , по крайней мере, этот: https://dotnet.microsoft.com/apps/aspnet/mvc, чтобы понять, что такое MVC. Из вашего примера кода я вообще не видел, чтобы вы использовали M - Model.

В любом случае, если вы просто хотите получить ключ продукта, который вводит пользователь, я бы сделал это так:

Определите контроллер

Мне не нравится идея помещать все в / home (т.е. HomeController). Только подумайте об URL-адресе страницы, который будет понятен пользователю.

Теперь я догадываюсь, что вы пытаетесь сделать. Я видел такие термины, как ключи продукта и пробные ключи. А как насчет контроллера под названием ProductKeyController:

public class ProductKeyController : Controller
{
    // This corresponds to /productkeys, and you can list all the product keys
    // on the view it returns.
    public ActionResult Index()
    {
        return View();
    }

    // This corresponds to /productkeys/create, and you can create a specific product
    // key by asking the user to provide a trial key?
    // The view this returns might be the page where you build the form
    public ActionResult Create()
    {
        ...
        return View();
    }

    // This corresponds the form post.
    [HttpPost]
    public ActionResult Create(CreateProductKeyViewModel model)
    {
        ...
        return View(model);
    }
}

Модель представления

Ваш MVC контроллер отвечает за выборку данных, при необходимости, построение модели представления и передачу ее представлению. Когда вы создаете ключ продукта, если вам нужно попросить пользователя ввести что-либо, вы можете объявить модель и свойства в ней:

public class CreateProductKeyViewModel
{
    [Required]
    [Display(Name = "Trial Key")]
    [MaxLength(22)]
    public string TrialKey { get; set; }
}

The View Create.cs html

Поскольку вы знаете, что контроллер будет передавать модель представления представлению, вы можете объявить его поверх представления, чтобы все, что вы делаете с моделью представления внутри представления строго типизировано.

@model CreateProductViewModel
@{
    Layout = "xxx";
}

<h1>Enter The Core-i Product Key (format RST 102A08R EPCA 00007)</h1>
@using(Html.BeginForm("create", "productKey", new { area = "" }, FormMethod.Post))
{
    @Html.LabelFor(x => x.TrialKey)
    @Html.TextBoxFor(x => x.TrialKey)

    <button type="submit">Create</button>
}

Видите, как все в представлении строго типизировано? Вам не нужно вручную создавать форму и ввод для запроса у пользователя пробного ключа.

И когда пользователь вводит пробный ключ и нажимает кнопку «Отправить», он отправляет сообщение обратно методу Post Create. Поскольку представление объявляется с моделью представления, а модель представления является параметром метода create, MVC уже выполнил привязку модели для вас, поэтому вы получите обратно то, что пользователь ввел в посте.

Это хотя бы то, что вам нужно.

Примечание: Я все написал вручную. Не тестировалось.

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