Модель класса MVC не заполнена на пост - PullRequest
3 голосов
/ 16 февраля 2012

У меня есть две модели MVC, которые выглядят так:

public class OtherModel
{
   [Required]
   [Display(Name = "Another ID")]
   public int id{ get; set; }
}

public class MyModel
{
   [Required]
   [Display(Name = "ID")]
   public int id { get; set; }


   public PlayerModel otherModel = new OtherModel ();
}

Мой контроллер имеет действие [HttpPost] под названием USE, которое выглядит следующим образом:

[HttpPost]
public ActionResult Use(MyModel myModel)
{
   /// myModel.otherModel.id is 0 here!!
}

Это действие принимает MyModel. Когда моя форма публикуется, переменная otherModel содержит 0 для значения id. Теперь представление, содержащее форму, передается MyModel и фактически отображает otherModel.id на странице. Проблема в посте не правильно маршалинг данных формы в объект otherModel, и я понятия не имею, почему.

Еще одно примечание: когда я проверяю заголовки данных формы для сообщения, я четко вижу otherModel.id со значением, которое я ожидаю.

Почему эти данные не отображаются правильно в моем объекте otherModel?

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 16 февраля 2012

Зарегистрировали ли вы связыватель в Global.asax.cs?

public static void RegisterBinders(ModelBinderDictionary binders)
{
   binders.Add(typeof(MyModel), new MyModelBinder());
   // other binders
}

Это называется в Application_Start следующим образом:

protected void Application_Start()
{
   RegisterBinders(ModelBinders.Binders);
}

PS: я предположил, что вы используете пользовательскиймодельный переплет.Если вы используете автоматическое связывание, посмотрите, соблюдаете ли вы соглашения об именах.

0 голосов
/ 07 мая 2014

У меня была почти идентичная проблема. Для меня было исправлено, как сказал Мэтт, сделать внутренний объект свойством с необходимыми средствами доступа.

public class OuterModel 
{
    public OuterModel ()
    {
        AuxData= new InnerModel();
    }
    public InnerModel AuxData{ get; set; }
}

public class InnerModel
{
     Int Id {get; set;}
}
0 голосов
/ 16 февраля 2012

Вместо инициализации otherModel новым объектом в строке PlayerModel otherModel = new OtherModel(); используйте свойство public PlayerModel otherModel { get; set; }. otherModel нужен установщик свойств для подшивки модели, чтобы правильно присвоить значение. Это может потребовать, чтобы вы также изменили способ заполнения свойства otherModel при отображении представления - создайте объект и назначьте его явно в методе контроллера отображения или в какой-либо другой функции, которая увлажняет модель.

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