2013-11-14 3 views
0

У меня есть действие, которое получает модель типа:Как передать подтип модели к действию от основного действия

ExchangeBooksSearchViewModel : ExchangeBasicSearchViewModel 

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

public ActionResult Books(ExchangeBooksSearchViewModel searchModel, int? page) 
{ 
    .. 
    return View("Index", searchModel); 
} 

..

@model Ui.Mvc.Models.ExchangeBasicSearchViewModel 
@{ 
    ViewBag.Title = metaExchange.Index_PageTitle; 
    ViewBag.ActionName = "Index"; 
} 
@section InlineTitle {<h2>@metaExchange.Index_InlineTitle</h2> 
} 
@section SearchArea { @Html.Partial("_ItemsSearch_ManagerPartial", Model)} 

@Html.Partial("_ItemsList_AjaxPartial", Model) 

@section HiddenPostFields { } 

@section scripts{} 

И затем в течение _ItemsSearch_ManagerPartial я называю действие на отобразить соответствующую поиска Ui для модели:

<div id="AdvancedCategorySearch"> 
         @Html.Action("NonAjaxPostbackCategorySearchDisplay", Model) 
        </div> 

..

[AllowAnonymous] 
     public ActionResult NonAjaxPostbackCategorySearchDisplay(ExchangeBasicSearchViewModel searchModel) 
     { 
      if (searchModel.CategoryAction == "Books") 
      { 
       return PartialView("_ItemsSearch_Books", new ExchangeBooksSearchViewModel()); 
      } 

      if (searchModel.CategoryAction == "Computers") 
      { 
       return PartialView("_ItemsSearch_Computers", new ExchangeComputersSearchViewModel()); 
      } 

      return PartialView("_ItemsSearch_Basic", new ExchangeBasicSearchViewModel()); 
     } 

Проблема в том, что к тому времени я получаю

NonAjaxPostbackCategorySearchDisplay(ExchangeBasicSearchViewModel searchModel) 

У меня есть только базовый тип ExchangeBasicSearchViewModel к работайте, даже если я попытаюсь использовать:

ExchangeBasicSearchViewModel as ExchangeBooksSearchViewModel 

Я получаю null. Это я не понимаю. Я понимаю, что моя точка зрения есть тип модели из

@model Ui.Mvc.Models.ExchangeBasicSearchViewModel 

точка которого позволяют подтипы необходимо передать в общей функции зрения, но так как это все еще происходит на сервере, у меня нет понять, где мой подтип был разделен на базовый тип?

В «нормальном» C# вы можете обходить интерфейс и затем при необходимости прибегать к типу, который вам «нужен» в соответствующей точке. Я подозреваю, что это связано с автоматической привязкой к модели, но не с уверенностью, и хотелось бы знать, как обойти это, иначе я подозреваю, что я нахожусь ([n] * поисковые модели) копировать/вставлять код, изменяющийся только для типа модели ,

Надеюсь, это имеет смысл.

ответ

0

Неверная точка зрения на представление. вы должны использовать:

@model Ui.Mvc.Models.ExchangeBookSearchViewModel 

ExchangeBasicSearchViewModel просто должны действовать как абстрактный класс

+0

Если я это сделать Ui.Mvc.Models.ExchangeBookSearchViewModel то, что мне делать с Ui.Mvc.Models.ExchangeComputerSearchViewModel? Копировать вставить? – rism

+0

что это? вы не упомянули в нем вопрос –

Смежные вопросы