Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Топик ненависти к Asp.Net MVC / 25 сообщений из 235, страница 1 из 10
27.09.2013, 08:16
    #38409216
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
Имеем Asp.Net MVC 4 текущей версии, взятой нугетом. В метод Post приходит null,
несмотря на то, что в Request.Form все данные присутствуют. Если изменить название свойства в модели - всё работает. Где описано такое поведение DefaultModelBinder?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    public class TestData
    {
        // Если изменить название свойства, например на Value, всё работает.
        public string Data { get; set; } 
    }

    public class MyController : Controller
    {
        public ActionResult TestGet()
        {
            return View(new TestData { Data = "Data" });
        }

        [HttpPost]
        public void TestGet(TestData data)
        {
            if (data == null)
            {
                 // Почему? Request.Form всё есть...
            }
        }
    }


Код: c#
1.
2.
3.
4.
5.
6.
@model TestData
@using (Html.BeginForm())
{
    @Html.EditorFor(v => v.Data);
    <input type="submit" value="Сохранить" />
}
...
Рейтинг: 0 / 0
27.09.2013, 09:12
    #38409239
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
а меня задолбала AjaxMin.dll
то в одном проекте подверсия не совпадет, то в другом
я б поразбирался с этими тонкостями да некогда
...
Рейтинг: 0 / 0
27.09.2013, 09:32
    #38409251
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
госпади, как вас угораздило назвать поле данных и модель в "посте" одинаково. Нормальные имена давать не пробовали?
правится легко:
Код: c#
1.
2.
3.
4.
5.
6.
7.
public void TestGet(TestData model)
        {
            if (model== null)
            {
                 // Почему? Request.Form всё есть...
            }
        }


нормальное поведение. у вас приходит в форме поле Data, контролер ожидаете модель data типа TestData. биндер не может замапить строчку на ваш класс, проверяется легко
смените типо в посте
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
[HttpPost]
        public void TestGet(string data)
        {
            if (data != null)
            {
                // профит
            }
        }
...
Рейтинг: 0 / 0
27.09.2013, 09:35
    #38409257
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
Алексей К,

нельзя использовать наименование переменной, аналогичное наименованию поля:

Код: c#
1.
2.
3.
4.
5.
        [HttpPost]
        public void TestGet(TestData model)
        {
                 // теперь всё будет работать
        }



это давно известное поведение. нельзя мешать наименования, биндер путается.

если в TestData будет поле Model, тогда надо сменить сигнатуру метода на
Код: plaintext
public void TestGet(TestData model2)
...
Рейтинг: 0 / 0
27.09.2013, 09:36
    #38409259
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
имхо ненависть от корявости руки, платформа тут ни причем.
...
Рейтинг: 0 / 0
27.09.2013, 09:37
    #38409260
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
Паганельа меня задолбала AjaxMin.dll
то в одном проекте подверсия не совпадет, то в другом
я б поразбирался с этими тонкостями да некогда

какие проблемы, переходите на WebGrease или BundleTransformer
...
Рейтинг: 0 / 0
27.09.2013, 09:37
    #38409261
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
Эпическое зелье, сам Лёша пожаловал да с такой серьезной проблемой MVC

Датабиндер, конечно, умеет гадать на кофейной гуще, но не до такой же степени! :)
...
Рейтинг: 0 / 0
27.09.2013, 09:39
    #38409264
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
Паганельа меня задолбала AjaxMin.dll
Выбрось её на помойку.
...
Рейтинг: 0 / 0
27.09.2013, 09:40
    #38409266
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
handmadeFromRuгоспади, как вас угораздило назвать поле данных и модель в "посте" одинаково.Ну не повезло, с кем не бывает. :-)
handmadeFromRuНормальные имена давать не пробовали?Для этого надо почитать мануал про нормальные имена, где он? Где описаны эти соглашения об именах? Гугл молчит...
...
Рейтинг: 0 / 0
27.09.2013, 09:42
    #38409270
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
Алексей КДля этого надо почитать мануал про нормальные имена, где он? Где описаны эти соглашения об именах? Гугл молчит...

... это логика, Спок (с)
...
Рейтинг: 0 / 0
27.09.2013, 09:42
    #38409271
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
МСУЭпическое зелье, сам Лёша пожаловал да с такой серьезной проблемой MVC Не часто такое бывает.
МСУДатабиндер, конечно, умеет гадать на кофейной гуще, но не до такой же степени! :)А чё ему непонятно? Биндер путает имя параметра метода с именем свойства? Там регистр первой буквы разный исли чё... :-)

D ata vs d ata
...
Рейтинг: 0 / 0
27.09.2013, 09:43
    #38409274
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
Алексей К,

Леш зачем читать манула)) просто сами посмотрите модель назваться data и поле data, вот как другой человек поймет что эт такое вообще и зачем?) код имхо должен быть самодокументируемым
...
Рейтинг: 0 / 0
27.09.2013, 09:44
    #38409275
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
hVosttнельзя использовать наименование переменной, аналогичное наименованию поля:

Код: c#
1.
2.
3.
4.
5.
        [HttpPost]
        public void TestGet(TestData model)
        {
                 // теперь всё будет работать
        }



это давно известное поведение. нельзя мешать наименования, биндер путается.Ок, пасиб. Это где-то описано, или выявлено эмпирически? :-)
...
Рейтинг: 0 / 0
27.09.2013, 09:45
    #38409276
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
Алексей К,
биндер через рефлекшен собирает вам класс и регистр поля не важен
...
Рейтинг: 0 / 0
27.09.2013, 09:45
    #38409277
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
Алексей КА чё ему непонятно? Биндер путает имя параметра метода с именем свойства? Там регистр первой буквы разный исли чё... :-)
D ata vs d ata
То есть формат URL тоже надо сделать регистрозависимым? :)
...
Рейтинг: 0 / 0
27.09.2013, 09:46
    #38409278
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
Алексей КОк, пасиб. Это где-то описано, или выявлено эмпирически? :-)

похоже рано или поздно с этим многие сталкиваются :)
...
Рейтинг: 0 / 0
27.09.2013, 09:48
    #38409282
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
handmadeFromRuЛеш зачем читать манула))"Если что-то не получается, надо читать инструкцию" (с) народное
handmadeFromRuпросто сами посмотрите модель назваться data и поле data, вот как другой человек поймет что эт такое вообще и зачем?) код имхо должен быть самодокументируемымНу захотелось мне, имею право. :-)
...
Рейтинг: 0 / 0
27.09.2013, 09:48
    #38409283
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
МСУТо есть формат URL тоже надо сделать регистрозависимым? :)
На мой взгляд минус биндера от odata именно в этом...
...
Рейтинг: 0 / 0
27.09.2013, 09:50
    #38409285
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
МСУАлексей КА чё ему непонятно? Биндер путает имя параметра метода с именем свойства? Там регистр первой буквы разный исли чё... :-)
D ata vs d ata
То есть формат URL тоже надо сделать регистрозависимым? :)А меж тем, данные приходят через Post а не через Url.
...
Рейтинг: 0 / 0
27.09.2013, 09:51
    #38409287
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
Алексей К,

нельзя катить бочку на ASP.NET MVC
(на какой-нибудь webforms можно)
...
Рейтинг: 0 / 0
27.09.2013, 09:52
    #38409290
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
Алексей К"Если что-то не получается, надо читать инструкцию" (с) народное
Особенности и слабые стороны связывания моделей в ASP.NET MVC
...
Рейтинг: 0 / 0
27.09.2013, 09:52
    #38409291
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
Алексей КА меж тем, данные приходят через Post а не через Url.
Ты понимаешь, что представляет собой пост запрос? :)
...
Рейтинг: 0 / 0
27.09.2013, 09:54
    #38409294
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
МСУАлексей КА меж тем, данные приходят через Post а не через Url.
Ты понимаешь, что представляет собой пост запрос? :)

http://msdn.microsoft.com/ru-ru/magazine/hh781022.aspx Просто помните, что механизм связывания моделей ожидает, что имена свойств соответствуют синтаксису именования передачи формы независимо от того, какой это запрос — GET или POST.
...
Рейтинг: 0 / 0
27.09.2013, 09:55
    #38409296
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
hVosttАлексей К,

нельзя катить бочку на ASP.NET MVC
(на какой-нибудь webforms можно) Понял, больше не буду. :-)
...
Рейтинг: 0 / 0
27.09.2013, 09:57
    #38409298
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Топик ненависти к Asp.Net MVC
офтоп:
hVostt,
картиночку с боромиром и таким текстом надо было))
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Топик ненависти к Asp.Net MVC / 25 сообщений из 235, страница 1 из 10
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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