.Net MVC-将数据从子视图传递到布局视图(动态元标记更新) [英] .Net MVC - Pass data from child view to layout view (Dynamic Meta Tag Updates)

查看:142
本文介绍了.Net MVC-将数据从子视图传递到布局视图(动态元标记更新)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道对此有重复的问题,但是我还没有找到答案.所以请帮忙. :)

I know that there are duplicate questions on this, but I haven't found the answer yet. So please help. :)

我正在尝试使用后端代码动态更改在布局视图中找到的元标记内容.这样,Facebook可以在共享页面时对数据进行爬网.直到现在,我都没有成功.

I am trying to change dynamically the meta tag content which is found in my layout view using back-end codes. This is so Facebook can crawl the data when the page is being shared. And until now I am unsuccessful.

这很困难,因为MVC不允许在布局"视图中读取Viewbag.另外,我的布局"视图不在共享文件夹中.而且我不能只是简单地将其转移到那里.

It's hard because MVC does not let Viewbag be read in the Layout view. Also, my Layout view is not in the shared folder. And I can't just simply transfer it there.

更新:元标记已经在布局视图"中进行了硬编码.我只需要动态更新meta标记中的content=""的值即可.

UPDATE: The meta tags are already hard-coded in the Layout View. I just need to update the value of the content="" in the meta tags dynamically.

这是我尝试过的方法:

查看包:返回空值

子视图

ViewBag.Meta1 = model.JobTitleHeading;
ViewBag.Meta2 = model.JobTitleDescription;

布局视图

var metaTag1 = ViewBag.Meta1;
var metaTag2 = ViewBag.Meta2;

JavaScript :更新元标记,但Facebook无法抓取更新的数据,因为JS在页面加载后即启动.

Javascript: Updates the Meta Tag but Facebook can't crawl the updated data because JS kicks in after page load.

$("meta[property='og\\:title']").attr("content", jl1);
$("meta[property='og\\:description']").attr("content", jl2);

HtmlMeta:返回空值

HtmlMeta metaTitle = new HtmlMeta();
HtmlMeta metaDescription = new HtmlMeta();

var placeHolderCheck = metaTitle.FindControl("LayoutPlaceHolder");

if (placeHolderCheck != null)
{

    metaTitle.Attributes.Add("property", "og:title");
    metaTitle.Content = model.Data1;

    Page.Header.Controls.Add(metaTitle);

    metaDescription.Attributes.Add("property", "og:description");
    metaDescription.Content = model.Data2;

    Page.Header.Controls.Add(metaDescription);
}

HttpContext会话:更新元标记,但会话过期.并且在第一页加载时,该会话为空,然后在第二页加载中,该会话包含来自第一个会话的值,因此是逻辑错误.

HttpContext Session: Updates Meta Tag but session expires. And on first page load the session is null, then on the second page load, the session contains the value from the first session, thus a logical error.

子视图:

this.ViewContext.HttpContext.Session["MetaTitle"] = model.Data1;

布局视图:

string metaHeading = string.Empty;    

metaHeading = (string)HttpContext.Current.Session["MetaTitle"];

我也尝试了HttpContext.Current.Items,TempData,PageData,但仍然得到空结果.

I also tried HttpContext.Current.Items, TempData, PageData, but still get null results.

我只想将数据从Controller传递到View,然后传递到Layout视图.或者,如有可能,将数据从Controller传递到布局"视图.

谢谢.

推荐答案

在布局视图中使用:

  <meta name="mymeta1" content="@ViewBag.Meta1" />
  <meta name="mymeta2" content="@ViewBag.Meta2" />

无论是在VIEW中还是在ACTION中更新值,它都可以正常工作.

It's working either you update values in VIEW or in ACTION.

ViewBag.Meta1 = "xyz";
ViewBag.Meta2 = "abc";

这篇关于.Net MVC-将数据从子视图传递到布局视图(动态元标记更新)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆