Как передать значение модели и текстовое значение в контроллер в MVC? - PullRequest
0 голосов
/ 22 октября 2011

Я хочу передать два значения из представления в контроллер.т.е. @ Model.idText и значение из текстового поля.Вот мой код:

    @using HTML.BeginForm("SaveData","Profile",FormMethod.Post)
    {
    <a href="someLink">@Model.idText</a>
    <input type="text" name="textValue"/>
    <input type="submit" name="btnSubmit"/>
    }

Но проблема в том, что если я использую "Url.ActionLink (), я могу получить @ Model.idText. По действию сообщения я могу получить значение текстового поля с помощью FormCollection. Но мне нужно получитьоба значения либо post, либо ActionLink

Ответы [ 5 ]

2 голосов
/ 27 октября 2011

с помощью ajax вы можете добиться этого: не используйте форму и объявляйте свои атрибуты вот так в тегах:

<a href="someLink">@Model.idText</a>
<input type="text" id="textValue"/>
<input type="submit" id="btnSubmit"/>

JQuery:

    $(function (e) {
        //    Insert
        $("#btnSubmit").click(function () {

            $.ajax({
                url: "some url path",
                type: 'POST',
                data: { textField: $('#textValue').val(), idField: '@Model.idText' },
                success: function (result) {
                    //some code if success
                },
                error: function () {
                    //some code if failed
                }
            });
            return false;
        });
      });

Надеюсь, это будет полезно.

1 голос
/ 23 октября 2011
@using HTML.BeginForm("SaveData","Profile",FormMethod.Post)
{
   @Html.Hidden("idText", Model.idText)
   @Html.TextBox("textValue")

   <input type="submit" value="Submit"/>
}

В вашем контроллере

public ActionResult SaveData(String idText, String textValue)
{
   return null;
}

Я не уверен, с какой частью вы боретесь - отправка нескольких значений вашему контроллеру или заставить привязку модели работать, чтобы значения, которые вы отправили, отображались в качестве параметров вашего действия. Если вы дадите более подробную информацию о том, чего вы хотите достичь, я соответствующим образом исправлю свой ответ.

0 голосов
/ 22 октября 2011

Создайте правило в global.asax, а затем скомпилируйте ваши параметры с помощью

@Html.ActionLink("My text", Action, Controller, new { id = Model.IdText, text =Model.TextValue})

Обязательно закодируйте текстовое значение, поскольку оно может содержать недопустимые символы

0 голосов
/ 23 октября 2011

По сути, вы хотите привлечь ModelBinder, чтобы сделать это для вас.Для этого вам нужно записать свое действие в свой контроллер с параметрами, которые соответствуют данным, которые вы хотите передать ему.Итак, для начала, предложение Иридио верное, хотя и не полная история.Ваше представление должно выглядеть следующим образом:

@using HTML.BeginForm("SaveData","Profile",FormMethod.Post)
{
@Html.ActionLink("My text", MyOtherAction, MaybeMyOtherController, new { id = Model.IdText}) // along the lines of dommer's suggestion...
<input type="text" name="textValue"/>
<input type="submit" name="btnSubmit"/>
@Html.Hidden("idText", Model.idText)
}

Обратите внимание, что я добавил помощник @ Html.Hidden, чтобы добавить скрытое поле ввода для этого значения в ваше поле.Таким образом, связыватель модели сможет найти эту точку отсчета.Обратите внимание, что помощник Html.Hidden находится внутри вашей формы, поэтому эти данные будут опубликованы на сервере при нажатии кнопки отправки.

Также обратите внимание, что я добавил предложение dommer для ссылки действия и заменил вашкод.По твоему вопросу трудно понять, так ли ты думаешь о передаче данных в контроллер, или это просто еще одна функциональность в твоем коде.Вы можете сделать это любым способом: иметь форму или просто иметь ссылку на действие.Что не имеет смысла, так это делать в обоих направлениях, если ссылка на действие не предназначена для того, чтобы идти куда-то еще ... ??!Всегда рады помочь нам, предоставив четкие ответы на ваши вопросы и примеры.Я думаю, что ответ dommer неверен - вы не указали, что TextValue передается в представление как часть модели.Может показаться, что вы хотите, чтобы TextValue вводился пользователем в представление, а не передавался вместе с моделью.В отличие от idText, который передается с моделью.

В любом случае, теперь вам нужно настроить другой конец, т. Е. Дать вашему действию необходимый

[HttpPost]
public ActionResult SaveData(int idText, string textValue) // assuming idText is an int
{
    // whatever you have to do, whatever you have to return...
}

@ dommer непохоже прочитал твой код.Тем не менее, его предложение об использовании помощника Html.ActionLink для создания ссылки в вашем коде является хорошим.Вы должны использовать это, а не код, который у вас есть.

Повтор:

Поскольку вы используете форму, вы собираетесь использовать эту форму для POST ввода пользователя на сервер.Чтобы получить значение idText, которое передается в представление вместе с моделью, вам нужно использовать html.Hidden htmlhelper.Это должно входить в форму, чтобы она также была отправлена ​​на сервер.

Чтобы связать сообщение формы с вашим методом действия, вам нужно указать параметры действия, которые ModelBinder может сопоставить со значениями, которые POSTedформа.Это можно сделать, используя тип данных каждого параметра и соответствующее имя.

Вы также можете иметь сложный тип, например, открытый класс MyTextClass, который имеет два открытых свойства:

public class MyTextClass
{
   public int idText{get;set}
   public string TextValue{get;set;}
}

И тогда в вашем действии контроллера вы могли бы иметь:

public ActionResult SaveData(MyTextClass myText)
{
   // do whatever
}

Связыватель модели теперь сможет сопоставлять опубликованные значения с общедоступными свойствами myText, и все будет хорошо в Дании.

HTH.

PS: Вы также должны прочитать приличную книгу о MVC.Кажется, вы летите немного слепым.

Еще одним вопросом будет вопрос о названии вашего действия, SaveData.Это больше похоже на метод хранилища.Называя свои действия, думайте как пользователь: она просто заполнила форму, у нее нет понятия сохранения данных.Таким образом, действие должно быть «Создать», «Редактировать», «Запрос информации» или что-то более наглядное.Сохранить данные НИЧЕГО не говорит о том, какие данные сохраняются.это могут быть данные кредитной карты или имя пользователя и телефон ...

0 голосов
/ 22 октября 2011

Вы можете использовать скрытое поле в вашей форме - например,

@Html.Hidden("idText", Model.idText)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...