Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

Asp Net Core: How to display the meta tags later from the body in the head

24.04.2018 (πŸ‘19432)


 

task

This code example shows how to write meta tags for Facebook and Google into the header of a web page in Asp.Net Core MVC.

The problem with working with MVC web pages is that the output pages usually consist of a _Layout page, which writes the actual View output in the Body_Content area.

As a result, you can no longer access the <head> area of ​​the website in the actual View.cshtml.

The meta tags must be written in the head area of ​​the website.

 

Solution:

When loading the data into the controller action, you can combine the metadata into a string and pass it to the output with ViewData [].

These ViewData [] are already present in the construction of the website in the _Layout Head edition.

 

Controller data

In the called action of the controller you summarize the data shortly before output to the view.

//--< MetaData >--

int lenMax200 = note.Text.Length;

if (lenMax200 > 200) lenMax200 = 200;

string sMetaDescription = note.Text.Substring(0, lenMax200);

String sMetaData = "<meta property=\"og: title\" content=\"" + note.Title + "\" />";

sMetaData += Environment.NewLine + "<meta property=\"og: type\" content=\"website\" />";

sMetaData += Environment.NewLine + "<meta property=\"og: url\" content=\"https://Readdy.net/Notes/Details/" + note.IDNote + " \" />";

sMetaData += Environment.NewLine + "<meta property=\"og: image\" content=\"https://Readdy.net/User_Files/Notes/Images/Image_" + note.IDNote + "_0_blog.jpg\" />";

sMetaData += Environment.NewLine + "<meta property=\"og: site_name\" content=\"Readdy.Net\" />";

sMetaData += Environment.NewLine + "<meta property=\"og: description\" content=\"" + sMetaDescription + "\">";

sMetaData += Environment.NewLine + "";

 

ViewData["MetaData"] = sMetaData;

//--</ MetaData >--

 

 

Output in the _Layout view

Now you just have to in the global _Layout View with Html.Raw the cached ViewData [".."] output

@{

    @Html.Raw(ViewData["MetaData"]);

}

 

 

View in the browser

Here you can see the output of the meta tags in the head section of the website.

This can then be read by Facebook and Google

 

Or in the HTML Source view

<meta property="og: title" content="das ist mit dem handy" />

<meta property="og: type" content="website" />

<meta property="og: url" content="https://Readdy.net/Notes/Details/81 " />

<meta property="og: image" content="https://Readdy.net/User_Files/Notes/Images/Image_81_0_blog.jpg" />

<meta property="og: site_name" content="Readdy.Net" />

<meta property="og: description" content=" ein neuer Test">

 

 

 

Controller code reference

In this example, the metadata creation is summarized before passing to the view at the foot

// GET: Notes/5

        public async Task<IActionResult> Details(long? ID)

        {

            // -------------< Details > -------------

            if (ID == null)

            {

                return NotFound();

            }

            long IDNote = System.Convert.ToInt64(ID);

 

            //--< Get User ID >--

            //internal referenz-Number for tracking in tables

            long IDCurrent_User = await UserInfo_Methods.getIDUser_as_Number(this.User, _dbContext);

            //--</ Get User ID >--

 

            //< Counters and log >

            //Userinfos Content counter and Self

            await UserInfo_Methods.increase_User_SumViews_Self_byIDUser(IDCurrent_User);

            await Counter_Logger.counter_of_View_erhoehen(IDCurrent_User,IDNote);

            await add_LogView(IDCurrent_User,IDNote);

            //</ Counters and log >

 

            //--< Get Note >--

            var note = await _dbContext.tbl_Notes.SingleOrDefaultAsync(m => m.IDNote == IDNote);

            if (note == null)

            {

                return NotFound();

            }

 

            //< check Owner >

            long IDOwner = note.IDUser;

            var owner = await _dbContext.tbl_User_Infos.SingleOrDefaultAsync(u => u.IDUser == IDOwner);

            if (owner  == null)

            {

                return Content("Owner not found");// NotFound();

            }

            //</ check Owner >

 

            //< check User >

            var user = await _dbContext.Users.SingleOrDefaultAsync(u => u.IDUser == IDOwner);

            if (user == null)

            {

                return Content("User not found");// NotFound();

            }

            //</ check User >

            //--</ Get Note >--

 

            //--< Get List of Images >--

            List<Note_Image_Model> list_Images = new List<Note_Image_Model>();

            var dataset_images = _dbContext.tbl_Notes_Images.Where(img => img.IDNote == ID); //EF get records

            //< fill list >

            foreach (Note_Image_Model image in dataset_images)

            {

                list_Images.Add(image);

            }

            //</ fill list >

            //--</ Get List of Images >--

 

            //----< sum and Ref >----

            //< Counters >

            await UserInfo_Methods.increase_User_SumViews_Content_byIDUser(IDOwner );

            //</ Counters >

 

            //--< check Referenz >--

            //< get RefID >

            string sRefPart = Request.Query["r"];

            string sIDReference = "";

            if (Convert_Methods.IsNumeric(sRefPart))

            { sIDReference =sRefPart;}

            else

            {

                sIDReference = Convert.ToString(IDOwner);

            }

            //</ get RefID >

 

            if (sIDReference!="")

            {

                //-< set ref_cookie >

                if (Request.Cookies["r"] == null)

                {

                    //-< new Cookie for 1 day >-

                    CookieOptions options = new CookieOptions();

                    options.Expires = DateTime.Now.AddDays(1);

                    //< save >

                    Response.Cookies.Append("r", sIDReference, options);

                    //</ save >

                    //-</ new Cookie for 1 day >-

                }

                //-< set ref_cookie >

            }

            //--</ check Referenz >--

 

 

            //----</ sum and Ref >----

 

            //--< Likes >--

            bool isLiked = false;

            bool isDisliked = false;

            bool isFollowed = false;

            bool isUser_Follower = false;

            //bool isCommented = false;

            if (IDCurrent_User > 0) {

                Note_Like_Model like = _dbContext.tbl_Notes_Likes.SingleOrDefault(n => n.IDNote == ID && n.IDUser == IDCurrent_User);

                if (like != null) { isLiked = true; }                          

                Note_Dislike_Model dislike = _dbContext.tbl_Notes_Dislikes.SingleOrDefault(n => n.IDNote == ID && n.IDUser == IDCurrent_User);

                if (dislike != null) { isDisliked = true; }

                Note_Follows_Model follow = _dbContext.tbl_Notes_Follows.SingleOrDefault(n => n.IDNote == ID && n.IDUser == IDCurrent_User);

                if (follow != null) { isFollowed = true; }

                User_FollowerModel follower = _dbContext.tbl_User_Followers.SingleOrDefault(n => n.IDUser == IDOwner && n.IDFollower == IDCurrent_User);

                if (follower != null) { isUser_Follower = true; }

            }

            //--</ Likes >--

 

 

            //--< Correct >--

            //note.HTML = Correct_Methods.correct_Out_SQL_Injection(note.HTML);

            //note.Title = Correct_Methods.correct_Out_SQL_Injection(note.Title);

            //note.Folder = Correct_Methods.correct_Out_SQL_Injection(note.Folder);

            //--</ Correct >--

 

            //--</ Correct >--

 

            //--< fill Data >--

            Notes_Detail_DataModel data = new Notes_Detail_DataModel();

            //< base data >

            data.Note = note;

            data.Image_List = list_Images;

            //</ base data >

 

 

            data.Ownername = user.UserName;

            data.has_Profil_Image = System.Convert.ToBoolean( owner.has_Profil_Image);

            data.sumUserFollowers = Convert_Methods.IntNull_to_Int(owner.sumFollowers);

            if (IDOwner == IDCurrent_User) data.Is_Own = true;

            data.IDCurrent_User = IDCurrent_User;

            data.IsFollowed = isFollowed;

            data.IsLiked = isLiked;

            data.IsDisLiked = isDisliked;

            data.IsUserFollower = isUser_Follower;

            //--</ fill Data >--

 

            //--< MetaData >--

            int lenMax200 = note.Text.Length;

            if (lenMax200 > 200) lenMax200 = 200;

            string sMetaDescription = note.Text.Substring(0, lenMax200);

            String sMetaData = "<meta property=\"og: title\" content=\"" + note.Title + "\" />";

            sMetaData += Environment.NewLine + "<meta property=\"og: type\" content=\"website\" />";

            sMetaData += Environment.NewLine + "<meta property=\"og: url\" content=\"https://Readdy.net/Notes/Details/" + note.IDNote + " \" />";

            sMetaData += Environment.NewLine + "<meta property=\"og: image\" content=\"https://Readdy.net/User_Files/Notes/Images/Image_" + note.IDNote + "_0_blog.jpg\" />";

            sMetaData += Environment.NewLine + "<meta property=\"og: site_name\" content=\"Readdy.Net\" />";

            sMetaData += Environment.NewLine + "<meta property=\"og: description\" content=\"" + sMetaDescription + "\">";

            sMetaData += Environment.NewLine + "";

 

            ViewData["MetaData"] = sMetaData;

            //--</ MetaData >--

 

            //< out to view >

            if (Request_Methods.check_Browser_IsMobile(Request) == true)

            {

                return View("details_mobile", data);

            }

            else

            {

                return View("details", data);

            }

            //</ out to view >

            // -------------</ Details > -------------

        }