【问题标题】:Generate Data on Request (ASP.NET MVC - HTML)根据请求生成数据 (ASP.NET MVC - HTML)
【发布时间】:2017-09-26 03:11:54
【问题描述】:

全部,

我正在尝试在菜单中动态生成用户标签

我做了以下

  1. 为 TAGS 项目创建了一个“局部视图”并将其放置在主菜单(导航栏)内

  2. 使用标签模型动态生成标签列表

我的部分视图有以下代码

@{ 
MVCbootstrap.Views.Tag.TagListGenerator tagList = new MVCbootstrap.Views.Tag.TagListGenerator();
List<MVCbootstrap.Models.TagModel> Tag_List = tagList.Get_Tags_List();
}
<li class="">
<a href="javascript:;">
    <span class="title">Tags</span>
    <span class=" arrow"></span>
</a>
<span class="icon-thumbnail"><i class="pg-indent"></i></span>
<ul class="sub-menu"> 
    @foreach (MVCbootstrap.Models.TagModel I in Tag_List)
    {
            <li class="">
                <a href="#">@I.Tag_name</a>                    
            </li>
    }
</ul>
</li>

现在性能方面,如果有 1000 个,我认为这是不正确的 TAGS 然后代码将生成 1000 TAG ITEMS 每次页面 刷新或访问,因为这些标签在导航菜单中。所以 我想要的是仅在有人点击时生成这些标签 "TAGS" HREF 如下

<a href="javascript:;">
    <span class="title">Tags</span>
    <span class=" arrow"></span>
</a>

为了提高性能,我只想在点击TAGS或标签下拉箭头时生成标签

带有虚拟标签数据的 Web UI 看起来像这样

public class TagListGenerator
{
    List<Models.TagModel> Tag_List = new List<Models.TagModel>(); 

    public List<Models.TagModel> Get_Tags_List()
    {
        //Send Tags List From LINQ.DB
        Tag_List.Add(new Models.TagModel() { Tag_id = 1, Tag_name = "Tag 1" });
        Tag_List.Add(new Models.TagModel() { Tag_id = 2, Tag_name = "Tag 2" });
        Tag_List.Add(new Models.TagModel() { Tag_id = 3, Tag_name = "Tag 3" });
        Tag_List.Add(new Models.TagModel() { Tag_id = 4, Tag_name = "Tag 4" });
        Tag_List.Add(new Models.TagModel() { Tag_id = 5, Tag_name = "Tag 5" });            
        return Tag_List;
    }
}

标签列表的 Web UI 如下所示,当前单击 TAGS 会切换列表

这里的标签模型很简单,如下

 public class TagModel
{
    public Int64 Tag_id { get; set; }
    public string Tag_name { get; set; }
}

干杯

已解决:

所以我在我的 HOME 控制器中创建了一个名为 GetTags 的操作,它返回部分视图

[HttpGet]
    public ActionResult GetTags()
    {            
        return PartialView("~/Views/TagNavMenu");

    }

然后我在我的主视图中添加了这个

 <li class="">
            <a href="javascript:;" id="showtags">
                <span class="title">Tags</span>
                <span class=" arrow"></span>
            </a>
            <span class="icon-thumbnail"><i class="pg-indent"></i></span>
            <ul class="sub-menu" id="divdiv">  

            </ul>
        </li>

然后我使用这个调用来渲染局部视图

    <script src="~/Scripts/jquery-1.10.2.min.js"></script>  
<script type="text/javascript">
    $('#showtags').on('click', function () {
        $.ajax({
            type: "GET",
            url: '/Home/GetTags',
            success: function (data) {
            $('#divdiv').html(data);
            }
        });
    });
</script>

现在工作

【问题讨论】:

  • 这里需要用到AJ​​AX。创建一个控制器动作,它将返回 JSON 格式的标签列表,并通过 AJAX 在单击“标签”时调用该动作。然后当您从服务器收到标签列表时动态创建 HTML。
  • @ChetanRanpariya 感谢您的回复,我在 HOME 控制器中创建了一个名为 GetTags 的操作,我正在从 TAG_Menu 的操作中返回 PARTIAL VIEW .. 它似乎不起作用 - (请参阅上面编辑过的帖子)
  • @aliusman 我认为您需要调查一下您的浏览器中发生了什么。转到开发人员工具并检查 JS 代码错误和网络活动。仔细检查ajax调用是否成功获得局部视图的结果,没有错误,并且没有JS错误。
  • 感谢@n.piskunov 我错过了 现在可以使用了,我如何显示正在加载的文本加载时?

标签: c# html asp.net-mvc razor


【解决方案1】:

它现在可以工作了,我如何在加载时显示正在加载的文本?

您可以在 ajax 请求之前放置加载消息。比如这样:

 <script type="text/javascript">
    $('#showtags').on('click', function () {
        $('#divdiv').html('<p>Loading... {or place any other html}</p>');
        $.ajax({
            type: "GET",
            url: '/Home/GetTags',
            success: function (data) {
            $('#divdiv').html(data);
            }
        });
    });
</script>

【讨论】:

    【解决方案2】:

    如果这对其他人有帮助

    已解决:

    所以我在我的 HOME 控制器中创建了一个名为 GetTags 的操作,它返回部分视图

    [HttpGet]
        public ActionResult GetTags()
        {            
            return PartialView("~/Views/TagNavMenu");
    
        }
    

    然后我在我的主视图中添加了这个

     <li class="">
                <a href="javascript:;" id="showtags">
                    <span class="title">Tags</span>
                    <span class=" arrow"></span>
                </a>
                <span class="icon-thumbnail"><i class="pg-indent"></i></span>
                <ul class="sub-menu" id="divdiv">  
    
                </ul>
            </li>
    

    然后我使用这个调用来渲染局部视图

        <script src="~/Scripts/jquery-1.10.2.min.js"></script>  
    <script type="text/javascript">
        $('#showtags').on('click', function () {
            $.ajax({
                type: "GET",
                url: '/Home/GetTags',
                success: function (data) {
                $('#divdiv').html(data);
                }
            });
        });
    </script>
    

    现在工作

    【讨论】:

      猜你喜欢
      • 2018-09-27
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多