2012-02-10 3 views
4

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

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

<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.

ответ

3

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

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

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

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

<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 
} 


концепция при работе здесь называется привязкой к модели. См. Controllers and Action Methods in ASP.NET MVC Applications и прокрутите вниз до раздела «Параметры метода действия».

0

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

@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) 
     { 
} 
+0

вот как работает MVC. Форма/браузер отправляет все входы в HTTP POST, отправленные на сервер. MVC автоматически свяжет входы с параметрами действий в соответствии с различными правилами привязки. Эта возможность выходит за рамки простых типов для ваших моделей, если вы следуете рекомендациям по разработке ASP.NET MVC. –

0

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

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

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

+0

вы должны указать [HttpPost] attribiute – Jacek

0

В действительности вы не можете использовать 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); 
     }); 
    }); 
});