Передача параметров запроса обратно в контроллер из строго типизированного представления - PullRequest
1 голос
/ 06 сентября 2011

Возможно, я делаю это сложнее, чем нужно, но ...

У меня строго типизированное представление (страница регистрации), которое отлично работает, однако пользователи приходят к нему по ссылкекоторый отправляется им по электронной почте, и этот URL содержит несколько параметров строки запроса, с которыми мне нужно работать при отправке формы регистрации.

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

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

Ответы [ 5 ]

3 голосов
/ 06 сентября 2011

Добавьте все необходимые параметры к скрытому тегу input внутри form. Это заставит эти значения возвращаться в действие контроллера.

2 голосов
/ 07 сентября 2011

Ваш URL с параметрами ссылается на GET Action, верно?Если это так, добавьте имена параметров в качестве переменных в объявление этого действия.Например, скажем, мой URL, отправленный по электронной почте, был:

http://mywebsite.com/register?id=511&sl=department

Тогда мое соответствующее действие:

public ActionResult Register(int id, string sl)
{
    MyModel myModel = new MyModel();
    myModel.id = id;
    myModel.sl = sl;
    return View(myModel);
}

Чтобы сохранить их во время многоэтапного процесса, вы можете использовать либо HTML.HiddenFor () в представлении, чтобы добавить скрытое поле или сохранить в каком-либо другом месте (например, в базе данных).


Если вы не хотите добавлять их в свою модель, вы можете сделать это:

public ActionResult Register(int id, string sl)
{
    ViewData["id"] = id;
    ViewData["sl"] = sl;
    return View();
}

А теперь в представлении есть скрытое поле для каждого.Затем в действии контроллера POST-to:

[HttpPost]
public ActionResult Register(MyModel myModel, int id, string sl)
{
    // the hidden fields are now in id and sl
    // ASSUMPTION: the names of "id" and "sl" don't exist in MyModel -- if they do, collision
    ...
    return View();
}
0 голосов
/ 07 сентября 2011

Вам нужно использовать скрытые поля для переноса параметров из URL в View в Controller. Например, если у вас есть параметр ID в вашей модели, который вам нужно передать контроллеру, вы должны иметь следующее в форме регистрации в представлении.

@Html.HiddenFor(m=>m.ID)

Таким образом, когда ваша форма будет отправлена ​​обратно, ваша модель также будет заполнена свойством ID.

0 голосов
/ 07 сентября 2011

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

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

Чтобы отделить их от модели страницы, используйте:

protected ActionResult Register(RegisterModel model, string parameterName1, int parameterName2)
{
    // parameterName1 and parameterName2 now contain values from the form with the same names
    ...
}

OR

protected ActionResult Register(RegisterModel model, FormCollection fc)
{
    // fc now contains all form values
    ...
}
0 голосов
/ 06 сентября 2011

Вы можете добавить соответствующие скрытые поля в представлении и добавить их в качестве параметров в функцию post, если вы хотите оставить их отдельно от модели.

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

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