При использовании MVC, как вызвать значения Controller Action и Pass Text Box? - PullRequest
4 голосов
/ 10 февраля 2012

Как читать значение из текстового поля при использовании Html.ActionLink, чтобы значение могло быть передано действию?

У меня есть следующий код:

<table>
        <tr>
            <th>
                Consumer Key:
            </th>
            <td>
                @Html.TextBox("ConsumerKey")
            </td>
        </tr>
        <tr>
            <th>
                Consumer Secret Key:
            </th>
            <td>@Html.TextBox("ConsumerSecretKey")
            </td>
        </tr>
        <tr>
        <th>
        </th>
        <td>@Html.ActionLink("Retreive Access Tokens", "/Retrieve"</td>
        </tr>
    </table>

Как правило,Мне нужно было бы вызвать действие контроллера и передать значения текстового поля.

Как это было бы возможно с MVC?

Я знаю, что могу реализовать его, используя только кнопку HTML и AJAXпризываю к этому действию, но я надеялся, что будет другой способ, используя элементы управления MVC.

Ответы [ 4 ]

3 голосов
/ 10 февраля 2012

Поместив свой код в блок Html.BeginForm («Retrieve», «Twitter»), HTML-код, отображаемый в браузере, будет заключен в тег формы, что-то вроде:

<form method="POST" action="/Retrieve/Twitter">
    <table>...</table>
</form>

Затем, когда вы нажмете кнопку «Отправить», форма вместе со всеми значениями в текстовых полях будет опубликована в вашем приложении MVC.Затем MVC выполняет сопоставление этих значений формы (текстовые поля, созданные с помощью @ Html.TextBox ("ConsumerSecretKey") и их значения) с параметрами действий вашего контроллера.

В вашем случае примерно следующеебудет отображаться в браузере (ссылку действия нужно будет изменить на тип ввода "submit", как я сделал ниже:

<form method="POST" action="/Retrieve/Twitter">
    <table>
        <tr>
            <th>
                Consumer Key:
            </th>
        <td>
            <input id="ConsumerKey" name="ConsumerKey" type="text" value="" />
        </td>
    </tr>
    <tr>
        <th>
            Consumer Secret Key:
        </th>
        <td>
            <input id="ConsumerSecretKey" name="ConsumerSecretKey" type="text" value="" />
        </td>
    </tr>

    <td><input type="submit" id="Retrieve" value="Retreive Access Tokens" /></td>

    </tr>

</table>

</form>

Когда это отправляется обратно в ваше приложение, текст, который вы ввели в текстовые поля (отображаются как теги), будет соответствовать параметрам вашего метода действия, соответствующим их имени:

public ActionResult Retrieve(string consumerKey, string consumerSecretKey)
{
    //action method code here
}

Концепция на работе здесь называется привязкой к модели.См. Контроллеры и методы действий в приложениях ASP.NET MVC и прокрутите вниз до раздела «Параметры метода действия» для обзора

0 голосов
/ 10 февраля 2012

На самом деле вы не можете POST, используя Html.ActionLink. Вы можете достичь этого, используя Ajax.ActionLink и задав AjaxOptions свойства. Если вы не можете использовать form, вы всегда можете реализовать функцию jQuery, которая перехватывает щелчок, сгенерированный Html.ActionLink (на основе идентификатора, сгенерированного этим помощником) и добавляя значение из текстового поля в качестве параметра. Проблема здесь в том, что если вы не используете Ajax, вы отправите значения с помощью метода GET, и это большое НЕТ. GET следует использовать для извлечения значений, а не для изменения содержимого базы данных или другого внутреннего хранилища данных. Если вы планируете использовать Ajax, вы можете сделать что-то вроде этого:

$(document).ready(function() {
    $("myActionLinkId").click(function() {
        var textBoxValue = $("#myTextBoxId").val();

        $.post($(this).attr("href"), { id: textBoxValue }, function(result) {
            alert("Result data: " + result);
        });
    });
});
0 голосов
/ 10 февраля 2012

Вы можете использовать объект FormCollection.

[HTTPPost]
 public ActionResult Retrieve(FormCollection collection)
    {
         string consumerKey=collection["ConsumerKey"];
         string consumerSecretKey=collection["ConsumerSecretKey"];
    }

Используйте метод отправки формы, используя кнопку отправки в форме.

0 голосов
/ 10 февраля 2012

Я использовал Html.BeginForm с кнопкой отправки, затем, как ни странно, значения текстового поля автоматически отправляются на сервер:

@using (Html.BeginForm("Retrieve", "Twitter"))
    {
    <table>
        <tr>
            <th>
                Consumer Key:
            </th>
            <td>
                @Html.TextBox("ConsumerKey")
            </td>
        </tr>
        <tr>
            <th>
                Consumer Secret Key:
            </th>
            <td>@Html.TextBox("ConsumerSecretKey")
            </td>
        </tr>
        <tr>
            <th>
            </th>
            <td>
                <input type="submit" id="Retrieve" value="Retreive Access Tokens" />
            </td>
        </tr>
    </table>
    }

А в моем действии контроллера:

 public ActionResult Retrieve(string consumerKey, string consumerSecretKey)
        {
}
...