简体   繁体   中英

Need to get the 2sxc Field Type from an Entity

After getting everything working on this previous question Is there a way to Clone one or many Entities (records) in Code , I wanted to clean it up and make it more useful/reusable. So far, I am deciding how to copy/add the field using the content-type field names , so attribute.Key inside the foreach on Attributes. What I need instead is to know the Entity field's Type; meaning String, Number, Hyperlink, Entity, etc.

So I want something like if(AsEntity(original).FieldType == "HyperLink") { do this stuff }. I have explored the API docs but have not spotted how to get to the info. Is it possible?

I did figure out that the attribute.Value has a Type that I could use to answer most of them, but Hyperlink and String are both showing, System.String.

Here are, in order, String, Hyperlink, Entity, and Number:

atts: ToSic.Eav.Data.Attribute`1[System.String]    
atts: ToSic.Eav.Data.Attribute`1[System.String]    
atts: ToSic.Eav.Data.Attribute`1[ToSic.Eav.Data.EntityRelationship]    
atts: ToSic.Eav.Data.Attribute`1[System.Nullable`1[System.Decimal]]

So is there a way from the Entity or its Attributes or some other pathway of object/methods/properties to just get the answer as the field Type name? Or is there a wrapper of some kind I can get to that will let me handle (convert to/from) Hyperlinks? I am open to other ideas. Since the fields.Add() is different by "FieldType" this would be really helpful.

It's kind of simple, but needs a bit more code because of the dynamic nature of Razor. Here's a sample code that should get you want you need:

@using System.Collections.Generic;
@using System.Linq;
@using ToSic.Eav.Data;

var type = AsEntity(Content).Type;
var attributes = type.Attributes as IEnumerable<IContentTypeAttribute>;
var typeOfAwards attributes.First(t => t.Name == "Awards").Type; // this will return "Entity"

I created a quick sample for you here: https://2sxc.org/dnn-tutorials/en/razor/data910/page

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM