Обновление ссылки на класс после получения через форму - PullRequest
0 голосов
/ 24 февраля 2012

Ну,

Давайте предположим, что у меня есть два класса Model:

public class BaseClass{
    public Int32 variable {get;set;}
}

public class DerivatedClass : BaseClass{
    public Int32 otherVariable {get;set;}
} 

и представление с типом BaseClass в качестве Model.

Если я передам DerivatedClass вПросмотр и извлечение информации через форму, она не будет снова «преобразована» в DerivatedClass?

Проблема в том, что если я получу тип модели внутри представления (Model.GetType (). FullName),Я получаю (без сюрпризов) тип DerivatedClass.

Но когда я проверяю опубликованную модель, внутри моего контроллера я получаю BaseClass (и, очевидно, его нельзя преобразовать!)

Контроллер:

public ActionResult ViewPage(){
    return View(new DerivatedClass());
}

[HttpPost]
public ActionResult ViewPage(BaseClass b){
    b.GetType().FullName;                 //Gives me Project.packeges.BaseClass.
    DerivatedClass d = (DerivatedClass)b; //Ops, It can't be done. Exception.
}

Просмотр:

@model Project.packeges.BaseClass

<h3>@Model.GetType().FullName</h3>  
<!-- Gives me Project.packeges.DerivatedClass -->
...

Моя логика неверна?Есть ли способ выполнить приведение внутри контроллера после получения информации о POST?

1 Ответ

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

Связыватель модели создаст объект BaseClass и попытается назначить свойства.

Таким образом, когда элемент управления придет к вашему действию после публикации, он будет иметь экземпляр класса BaseClass, а не дочерний класс.

Итак, это исключение во время приведения.

Ваше требование может быть выполнено с помощью CustomModelBinder и Create Instance на DeriveClass, когда запрашивается экземпляр BaseClass.

Я ответил на аналогичный пост с полным описанием.

Пожалуйста, ознакомьтесь с " MyPost " . Это может быть то, что вы ищете.

...