Получить данные формы в методе действия: ASP.NET MVC 3 - PullRequest
0 голосов
/ 03 февраля 2012

Я пытаюсь использовать простую форму только с текстовым полем, чтобы получить некоторую информацию, которая будет использоваться в методе действия для перенаправления на другой метод действия. Вот контекст:

В моем файле global.asax.cs указан маршрут, который печатает «moo» заданное количество раз. Например, если вы ввели «www.cows.com/Moo8», «Moo» будет напечатано 8 раз. Число является произвольным и будет печатать сколько угодно «Moo» как число в URL. У меня также есть форма на домашней странице, настроенная следующим образом:

@using (Html.BeginForm("Moo", "Web"))
{
    <text>How many times do you want to moo?</text>
    <input type="text" name="mooNumber" />
    <input type="submit" value="Moo!" />
}

Число, представленное в форме, следует отправить методу действия «Moo» в контроллере «Web» (WebController.cs):

 [HttpPost]
        public ActionResult Moo(int mooNumber)
        {
            Console.WriteLine(mooNumber);
            return RedirectToAction("ExtendedMoo", new { mooMultiplier = mooNumber });           
        }

Наконец, метод действия "Moo" должен отправить меня обратно на исходную страницу "www.cows.com/Moo8"; как вы можете видеть выше, я просто использовал уже существующий метод действия «ExtendedMoo»:

 public ViewResult ExtendedMoo(int mooMultiplier)
        {
            ViewBag.MooMultiplier = RouteData.Values["mooMultiplier"];

            return View();
        }

Как получить доступ к значению, представленному в моей форме, и использовать его при последнем вызове «ExtendedMoo»?

Ответы [ 4 ]

0 голосов
/ 15 марта 2014

Если я правильно понял

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

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

    [HttpPost]
    public ActionResult Moo(int mooNumber, **formcollection fc**)
    {
        **string textBoxVal= fc.getvalue("mooNumber").AttemptedValue;**
        Console.WriteLine(mooNumber);
        return RedirectToAction("ExtendedMoo", new { mooMultiplier = mooNumber });           
    }
0 голосов
/ 03 февраля 2012

Вместо RedirectToAction используйте Redirect и создайте URL.Это должно сработать:

return Redirect(Url.RouteUrl(new { controller = "Web", action = "ExtendedMoo", mooMultiplier = mooNumber }));

Надеюсь, я помогу.

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

Ого. Оказывается, эта форма была на моей домашней странице, поэтому вместо использования «Moo» в качестве метода действия мне нужно было переопределить метод действия «Homepage» с помощью аннотации [HttpPost] над той. Не осознавал, что формы, отправленные на страницу, с которой они были получены, - это действительно полезная информация для решения этой проблемы!

Спасибо всем за ваши попытки помочь!

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

См. этот пост или этот , вы можете получить представление о том, как работает маршрутизация. Что-то не так с "www.cows.com/Moo8", попробуйте это выяснить. Подсказка "{controller}/{action}/{parameter_or_id}"

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