2017-10-24 2 views
0

enthält Ich verwende eine t4-Vorlage für den Gerüstcontroller. Es erzeugt die SelectLists für die damit verbundenen Eigenschaften des Modells mit diesem Code:Überprüfen, ob das zugehörige Modell die Eigenschaft

<# foreach (var property in relatedProperties.Values) { #> 
    ViewBag.<#= property.ForeignKeyPropertyNames[0] #> = new SelectList(db.<#= property.EntitySetName #>, "<#= property.PrimaryKeyNames[0] #>", "<#= property.DisplayPropertyName #>"); 
<# } #> 

Im rüsteten Controller, ist das Ergebnis ein paar Zeilen wie diese:

ViewBag.id_state = new SelectList(db.states, "id", "state_name"); 

Aber ich will es überprüfen, ob die damit verbundene Einrichtung enthält eine Eigenschaft „aktiv“ genannt, und wenn sie wahr ist, dann erzeugt dies statt:

ViewBag.id_state = new SelectList(db.states.Where(u => u.active == true), "id", "state_name"); 

ich weiß, dass die Vorlage in ich den Namen der zugehörigen Einheit mitziehenoder property.ShortTypeName, aber keine Ahnung, wie man es benutzt, um zu tun, was ich will.

Antwort

0

Sie benötigen Zugriff auf alle Eigenschaften der spezifischen Entität. Wenn Sie sie noch nicht haben, können Sie etwas wie typeMapper.GetSimpleProperties(entity) verwenden. Wie auch immer Sie diese Eigenschaften erhalten, die Suche nach dem Vorhandensein einer Eigenschaft ist einfach eine Frage von:

// grab all the properties 
var properties = typeMapper.GetSimpleProperties(entity); 
// search for specific property 
var hasActive = properties.Any(p=> p.Name == "active"); 
// format your output based on that property 
var filter = (hasActive) ? ".Where(u => u.active == true)" : ""; 
<# foreach (var property in relatedProperties.Values) {#> 
    ViewBag.<#= property.ForeignKeyPropertyNames[0] #> = new SelectList(db.<#= property.EntitySetName #><#= code.Escape(filter) #>, "<#= property.PrimaryKeyNames[0] #>", "<#= property.DisplayPropertyName #>"); 
<# } #> 

// Or you can put the condition in the foreach statement: 

var properties = typeMapper.GetSimpleProperties(entity); 
    var hasActive = properties.Any(p=> p.Name == "active"); 
    var condition = (hasActive) ? ".Where(u => u.active == true)" : ""; 
<# foreach (var property in relatedProperties.Values) { 
    if(hasActive){ 
#>.<#= property.ForeignKeyPropertyNames[0] #> = new SelectList(db.<#= property.EntitySetName #>, "<#= property.PrimaryKeyNames[0] #>", "<#= property.DisplayPropertyName #>"); 
<# } else { #> 
    ViewBag.<#= property.ForeignKeyPropertyNames[0] #> = new SelectList(db.<#= property.EntitySetName #><#= property.PrimaryKeyNames[0] #>, "<#= property.PrimaryKeyNames[0] #>", "<#= property.DisplayPropertyName #>"); 
<# } #> 
Verwandte Themen