【问题标题】:Send Parent ViewData to Partial that is rendered in javascript将父 ViewData 发送到在 javascript 中呈现的 Partial
【发布时间】:2020-09-11 05:00:32
【问题描述】:

我正在使用 asp .net core 3,我通过 javascript 添加了一些多个部分

function AddBill(type)
        { tag = "....."; // some div and a tags
                $.get('/Glasses/DisplayFarBill?index=' + farIndex,
                            function (partial) {
                                $('#FarSightedBillsSection').append(tag);
                                $('#farSighted' + farIndex).append(partial);
                                $('#farSighted' + farIndex).collapse('show');
                                farIndex++;
                            });
}

我在父节点上有多个 ViewData 属性,它通过数据库上下文填充控制器,如果我添加带有标签的 partialview,部分识别父 ViewData,但是当我通过 javascript 添加它们时,它们不会并且我应该再次填写它们并多次访问数据库。

public ActionResult DisplayFarBill(int index)
        {
            ViewData["Index"] = index;

            //ViewData["LenseCover"] = new SelectList(_context.LenseCover, "Id", "Name");
            //ViewData["FrameBrand"] = new SelectList(_context.FrameBrand, "Id", "Name");
            //ViewData["FrameModel"] = new SelectList(_context.FrameModel, "Id", "Name");
            //ViewData["LenseBrand"] = new SelectList(_context.LenseBrand, "Id", "Name");

            BillFarSighted billFarSighted = new BillFarSighted
            {
                PackFactor = 1,
                LenseCoverId = 2
            };
            return PartialView("BillFarSighted", billFarSighted);
        }

如何将父 ViewData 发送到部分?

【问题讨论】:

    标签: asp.net-core asp.net-mvc-partialview


    【解决方案1】:

    我在父节点上有多个 ViewData 属性已填写 通过数据库上下文的控制器,如果我添加带有标签的部分视图,部分 识别父 ViewData,但是当我通过 javascript 添加它们时,它们 不要,我应该再次填写它们并访问 db multi 次。

    之所以可以使用partialview标签一次性获取ViewData,是因为partialview标签是在加载视图的同时进行的,而且只加载一次。

    但是当你使用ajax获取partialview时,程序会在这里输入另一个动作DisplayFarBill这会使之前存储的ViewData值消失。

    如果您不想在DisplayFarBill 操作中再次获取数据,您可以使用TempData 来存储它。

    需要注意的是,TempData存储模型需要序列化成json字符串进行传输,记得在部分视图中添加TempData.Keep()以保留数据以备下次使用。

    TempData和ViewData的具体区别请参考:TempData vs ViewData

    以下是我使用 TempData 的示例:

     public IActionResult Index()
        {
            var data=  new SelectList(_context.LenseCover, "Id", "Name");
            TempData["LenseCover"] = JsonConvert.SerializeObject(data); 
            return View(); 
        }
        public ActionResult DisplayFarBill(int index)
        {
            ViewData["Index"] = index; 
            BillFarSighted billFarSighted = new BillFarSighted
            {
                PackFactor = 1,
                LenseCoverId = 2
            };
            return PartialView("BillFarSighted", billFarSighted);
        }
    

    BillFarSighted 局部视图:

      @using Newtonsoft.Json;
        @model BillFarSighted
        
        @Html.DropDownList("LenseCover", JsonConvert.DeserializeObject<List<SelectListItem>>(TempData["LenseCover"].ToString()).ToList())
        @{TempData.Keep();}
    

    这是测试结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-14
      • 2011-06-16
      • 1970-01-01
      • 2015-11-16
      • 2018-08-24
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      相关资源
      最近更新 更多