Извините - только что понял, что ваш код VB, и я ответил на C #
Это может быть связано с тем, что связыватель модели теперь ищет modelname.property
вместо property
в ValueProviders и ранее, поскольку это был параметр метода прямого действия, он просто искал property
.
Теперь, когда тип модели является членом другого, имя его свойства будет использоваться в качестве префикса, и я не верю , вы можете удалить это требование (можете попробовать Bind(Prefix="")
для параметра, но я не думаю, что это сработает).
Предполагается, что вы не привязываете индивидуально каждое свойство, и DefaultModelBinder
выполняет некоторые из этих свойств для вас.
Вы должны иметь возможность заставить его работать без изменения кода, изменив строку запроса на ?modelname.property=[value]
. Если вы используете форму, то вам следует рассмотреть возможность использования метода расширения Html.EditorFor
- так как он заботится о наименовании модели (при условии, что ваши имена членов ViewModel и имена входных моделей согласованы). Но как пример из строки запроса:
public class MyObject{
public string StringValue { get; set; }
}
public class MyObjectOuter{
public MyObject Nested { get; set; }
}
public ActionResult Index(MyObjectOuter obj);
Значение obj.Nested.StringProperty может быть заполнено: /Index?Nested.StringValue=hello%20world
, поскольку префикс obj
в любом случае неявен.
Если вам не нравится это, у вас есть несколько вариантов:
1) Измените сигнатуру метода, чтобы получить два параметра:
public ActionResult Index(MyObjectOuter outer, MyObject nested)
А затем в теле вы сразу копируете nested
в свойство obj.Nested
. Это немного смешно, но это сработает.
2) Вручную заставьте привязку свойств вашего класса использовать значения без префикса из ValueProviders
(но тогда вы ограничиваете тип вашей модели, чтобы работать только с определенными типами запросов - что не совсем гибко ).
3) Или, как я уже говорил ранее, если эти свойства связаны с формой Http, используйте Html.EditorFor
для создания разметки - он автоматически генерирует входные данные с правильными именами, если они не изменяются с вход-> выход.