Извините - только что понял, что ваш код был 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 Form, используйте Html.EditorFor
для генерации разметки - он автоматически генерирует входные данные с правильными именами, если они не меняются от input-> output.
person
Andras Zoltan
schedule
08.02.2011