使用tempdata在局部视图和主视图之间共享数据

时间:2013-10-02 00:01:46

标签: javascript asp.net-mvc razor

Basiacly我有1个视图,顶部有一个菜单,一个主内容div和一个侧边栏div,所有按钮都将不同的部分视图导入主内容div,现在我希望只导入侧边栏,如果它不同到当前加载的那个(节省加载时间)

@{if (TempData["CurrentSideBar"] != "Standard") 
  {
      <script type="text/javascript">
      $('#sidebarmain').load('@Url.Action("Standard", "SideBar")', function () {
           $('#loadingAjaxs').hide(); $('#flubestext').show(); window.history.pushState(null, 'title', '/users/');
      })
      </script>
      TempData["CurrentSideBar"] = "Standard";
   }}

我试过这个和viewbag并没有用,这是每个主要部分视图的顶部,它从标题按钮进入内容div。希望这是有道理的

2 个答案:

答案 0 :(得分:0)

为什么你没有这样的东西(如果它涉及更改partialview / html的按钮):

你可以创建一个链接/按钮并调用一个动作,如果有一个html结果,那么替换视图,如果没有,则不要替换

.cs中的ControllerAction

[ValidateInput(false)]
public JsonResult ControllerAction()
        {
            string newPartialHtml = "";
            using (var sw = new StringWriter())
            {
                ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, "NewPartialViewToLoad");
                var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData,TempData, sw);
                viewResult.View.Render(viewContext, sw);
                newPartialHtml= sw.GetStringBuilder().ToString();
            }
            return Json(new{ doReplace=true, newHtml = newPartialHtml});
        }

希望有所帮助

编辑:但是当然如果你这么做了,我建议把它放到一个静态方法中将partialview转换为字符串

答案 1 :(得分:0)

在主视图中添加Javascript变量:

_standard = 0;

在标准边栏中添加:

_standard = 1;

现在更改此代码:

    @{if (TempData["CurrentSideBar"] != "Standard") 
    {
      <script type="text/javascript">
      $('#sidebarmain').load('@Url.Action("Standard", "SideBar")', function () {
           $('#loadingAjaxs').hide(); $('#flubestext').show(); window.history.pushState(null, 'title', '/users/');
      })
      </script>
      TempData["CurrentSideBar"] = "Standard";
   }}

这一个:

  <script type="text/javascript">
    $(document).ready(function(){
      if(_standard == 0){
         $('#sidebarmain').load('@Url.Action("Standard", "SideBar")', function () {
            $('#loadingAjaxs').hide(); $('#flubestext').show(); window.history.pushState(null,   'title', '/users/');
         })
         _standard = 1;
      }
    });
  </script>