2013-04-17 6 views
0

У меня разные типы моделей, которые являются подклассами абстрактной модели. Я делаю его таким образом:Overriding @Display

<ul> 
    @foreach(dynamic model in @Model.ModelList) 
    { 
     <li> 
      @Display(model) 
     </li> 
    } 
</ul> 

Как я могу определить «Display» для каждого типа (я хочу, чтобы иметь различную cshtmls для каждого типа модели)? Я думаю, что это связано с формами. Как я могу определить одну форму и представление для каждого типа? Это правильный подход?

ответ

0

Я понял, решение (это было не так просто, потому что я новичок суммарно, если речь идет о саде) Создание новой формы:

public void Discover(ShapeTableBuilder builder) 
    { 
     builder.Describe("MyModel").OnDisplaying(
      displaying => 
       { 
        var elementObject = displaying.Shape; 
        var elementId = elementObject.Id; 
        elementObject.Metadata.Alternates.Add("MyModel__" + EncodeAlternateElement(elementId)); 
       }); 
    } 

    private string EncodeAlternateElement(string alternateElement) 
    { 
     return alternateElement.Replace("-", "__").Replace(".", "_"); 
    } 

С его помощью в целях:

<ul> 
@foreach (var model in @Model) 
{ 
    <li> 

     @Display(@New.MyModel(Id: model.Id, modelInstance: model)) 

    </li> 
} 
</ul> 
+0

Должны быть, помимо прочего, и альтернативы на основе id. –

+0

Серьезно? Во всяком случае, я использую имя класса (полученное отражением). С другой стороны ... возможно, это тоже может работать? – 2013-04-19 18:04:53