Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Не возвращается параметр в HttpPost метод действия. / 11 сообщений из 11, страница 1 из 1
06.06.2014, 18:39
    #38664038
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращается параметр в HttpPost метод действия.
Привет!

Не пойму, почему не возвращается параметр в метод действия для HttpPost запроса.

Я передаю коллекцию в get методе, которую заполняю во view и возвращаю в HttpPost метод.

Вот HttpGet

Код: c#
1.
2.
3.
4.
5.
6.
[HttpGet]
        public ActionResult Testing()
        {
            List<Test> t = new List<Test>();
            return View(t);
        }



Вот view для HttpGet метода:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
@model List<Questionnaire.Models.Test>
@{
    Layout = null;
}



<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Testing</title>
</head>
<body>
    @using (Html.BeginForm()){
    <div>
        
    </div>
    
<input type="submit" value="ok" />

    }
</body>
</html>



А вот метод HttpPost

Код: c#
1.
2.
3.
4.
5.
[HttpPost]
        public ActionResult Testing(List<Test> p)
        {
            return View();
        }



Но в нем значение p - null.

Подскажите, пожалуйста, почему не передается коллекция? Как нужно её передавать?

Спасибо.
...
Рейтинг: 0 / 0
06.06.2014, 20:32
    #38664134
Нахлобуч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращается параметр в HttpPost метод действия.
Откуда ей там взяться?

Грубо: все данные, которые передаются в [HttpPost] Testing() должны быть внутри формы в инпутах, селектах, текстбоксах и т.д.
...
Рейтинг: 0 / 0
06.06.2014, 20:38
    #38664138
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращается параметр в HttpPost метод действия.
Нахлобуч,

хорошо. Я это делаю. Я не весь код выложил:

Вот
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
[HttpGet]
        public ActionResult Testing(int id)
        {
            List<UserAnswer> userAnswers = new List<UserAnswer>();
            var questions = (from question in db.Questions
                             where question.TestID == id
                             select question).ToList();
            
            foreach (var questionItem in questions)
            {
                var correctAnswers = questionItem.Answer.Split(';');
                foreach (var correctAnswer in correctAnswers)
	            {
		            userAnswers.Add(new UserAnswer{QuestionText = questionItem.Text, Answer = correctAnswer, Available = false, QuestionType = questionItem.Type});
                }
              }
            return View(userAnswers);
        }



view:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
@model List<Questionnaire.Models.UserAnswer>

@{
    Layout = null;
   
}



<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Testing</title>
</head>
<body>
    @using (Html.BeginForm()){
    <ol>
        
        @foreach (var item in Model)
        {
                        @Html.CheckBoxFor(m => item.Available);
        }
            
        }
    </ol>
    <input type="submit" value="Check" />
}
</body>
</html>



UserAnswer

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
namespace Questionnaire.Models
{
    public class UserAnswer
    {
        public string QuestionText { get; set; }
        public string QuestionType{get; set;}
        public string Answer { get; set; }
        public bool Available { get; set; }
    }
}
...
Рейтинг: 0 / 0
06.06.2014, 21:19
    #38664176
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращается параметр в HttpPost метод действия.
mr_virtus,
используйте конструкцию for
Код: c#
1.
2.
3.
4.
   @for (var i = 0; i<Model.Count; i++)
        {
            @Html.CheckBoxFor(m => m[i].Available)
        }


или добавочную переменную, для индексатора атрибута name
в вашем варианте атрибут у всех синтаксически одинаков ( по крайней мере должен быть)
вот и не может собраться лист ((
...
Рейтинг: 0 / 0
06.06.2014, 21:33
    #38664188
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращается параметр в HttpPost метод действия.
Где-то в степи,


спасибо Вам большое! Так заработало!


А не подскажите, ещё, как сделать, что в этот же лист, в его элемент, записывался текст вопроса, который пользователь не вводит(А вопрос показывается пользователю как @Html.Label(Model[i].Answer);)?

В модели, которую мы передаю есть текст вопроса, нужно его там и оставить для возвращения к пост методу.
...
Рейтинг: 0 / 0
06.06.2014, 21:38
    #38664196
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращается параметр в HttpPost метод действия.
mr_virtus,

Спасибо, разобрался. Нужно писать так:

@Html.HiddenFor(m=>m[i].QuestionText);
...
Рейтинг: 0 / 0
10.06.2014, 14:09
    #38666355
monstrU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращается параметр в HttpPost метод действия.
Где-то в степиmr_virtus,
используйте конструкцию for
Код: c#
1.
2.
3.
4.
   @for (var i = 0; i<Model.Count; i++)
        {
            @Html.CheckBoxFor(m => m[i].Available)
        }


или добавочную переменную, для индексатора атрибута name
в вашем варианте атрибут у всех синтаксически одинаков ( по крайней мере должен быть)
вот и не может собраться лист ((
уточните пожалуйста,почему тут for срабатывает а foreach нет? по сути обращение к одному и тому же элементу происходит. атрибут Name формироваться по идее должен одинаково
...
Рейтинг: 0 / 0
10.06.2014, 14:33
    #38666390
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращается параметр в HttpPost метод действия.
monstrU,
авторатрибут Name формироваться по идее должен одинаково
схбпала?
Html.CheckBoxFor(m => item.Available);
Html.CheckBoxFor(m => m[i].Available)
где Вы тут общее нашли?
...
Рейтинг: 0 / 0
10.06.2014, 14:55
    #38666428
monstrU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращается параметр в HttpPost метод действия.
Где-то в степиmonstrU,
авторатрибут Name формироваться по идее должен одинаково
схбпала?
Html.CheckBoxFor(m => item.Available);
Html.CheckBoxFor(m => m[i].Available)
где Вы тут общее нашли?

item - элемент при переборе листа в Model, при вызове лябда-метода m => item.Available обращается к текущему элементу Model.
m[i]- обращаемся к текущему элементу списка Model

чего то я не понимаю :)
или я где-то вру?
...
Рейтинг: 0 / 0
10.06.2014, 18:25
    #38666763
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращается параметр в HttpPost метод действия.
monstrU,
Врете, занимаетесь самообманом
авторitem - элемент при переборе листа в Model, при вызове лябда-метода m => item.Available обращается к текущему элементу Model.
это с вашей точки зрения, а сборщик стариц видит тут пустышку,
ему без разницы, что вы тут думаете, он может подумать и так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@functions 
{
    public class Fooclass
    {
        public bool Available { get; set; }
    }
}

@foreach (var item in new List<Fooclass> { new Fooclass() })
{
    @Html.CheckBoxFor(m => item.Available);
}


однозначная неоднозначность, что вы передали в параметре выражения модель это еще ничего не значит.
тут два момента, после компила вызов делегата - определить значение, и определить name c привязкой к модели -
вот тут беда, в теле выражения моделью и не пахнет.., и он естественно лепит что есть..
а вот собрать из формс на сервере он естественно не может ничего..
...
Рейтинг: 0 / 0
11.06.2014, 10:07
    #38667180
monstrU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не возвращается параметр в HttpPost метод действия.
Где-то в степи,

спасибо
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Не возвращается параметр в HttpPost метод действия. / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]