列表在foreach中创建的项目不在部分视图MVC中显示

时间:2014-10-21 15:50:47

标签: jquery ajax asp.net-mvc-4

我正在编辑这个问题,因为我自己发现并且意识到原始问题是不正确的。控制器看起来像这样:

public class TabController : Controller
{
    /// <summary>
    /// Main Action for returning the tabs
    /// </summary>
    /// <returns></returns>
    public ActionResult BuildTabs(string jobNumber)
    {
        List<Tab> tabList = new List<Tab>();
        int newJobNumber = Convert.ToInt32(jobNumber);
        var indTabs = CompdataSurveysBusiness.DataPassThrough.GetIndustrybyJobNumber(newJobNumber);

        foreach (var t in indTabs)
        {
            Tab tab = new Tab() { Id = t.IndustryId, Name = t.IndustryId.ToString(), Visible = true, Url = jobNumber.ToString() };

            tabList.Add(tab);
        }

        return PartialView("_Tabs", tabList);
    }
}

这是在选择jsTree节点时将​​数据发送到控制器操作的jQuery。

.bind("select_node.jstree", function (event, data) {
    //code block for enabling accept and submit buttons once a job is selected in the treeview
    $("input").removeAttr("disabled");

    //conditional statement to disable the selection of parent (Job Type) Nodes
    if (data.node.children.length > 0) {
        $tree.jstree(true).deselect_node(data.node);
        //            $tree.jstree(true).toggle_node(data.node);
    };

    //conditional statement to disable the selected node
    if (data.node.children.length <= 0) {
        $tree.jstree(true).disable_node(data.node);
    }

    //not allow any other node to be selected
    //        $tree.jstree(true).deselect_all(true);

    //section for passing the ID of selected node to server for processing
    var id = data.node.id;
    var url = '@Url.Action("BuildTabs", "Tab", new { jobNumber = "-1" })';
    url = url.replace("-1", id);

    $.ajax({
        type: 'POST',
        url: url,
        dataType: 'json',
        contentType: 'application/json; charset=utf-8'
    });

这是部分视图的HTML。

@model List<AnalyticsTool.Models.Tab>
<div id="tabsWrapper">
    <ul id="ulTab">
        @foreach (var t in Model)
        {
            <li class="liTab"><a id="@t.Id" class="aTab" href="@t.Url">@t.Name</a></li>
        }
    </ul>
</div>

因此,当选择树节点时,我需要渲染制表符的局部视图。我不确定,因为我是MVC的新手,是如何在我的主视图上渲染局部视图。

3 个答案:

答案 0 :(得分:0)

您传入_Tabs

中的空列表
 @Html.Partial("_Tabs", new List<AnalyticsTool.Models.Tab>())

您应该使用Tab列表传入模型。你应该如何设置它的方式 使用

@{Html.Action("Index", "CONTROLLER NAME");}

答案 1 :(得分:0)

似乎你试图将部分视为儿童行为。部分没有自己的背景。它们继承主视图的上下文,只能访问主视图所具有的数据。你想要的是一个儿童行动。您的索引操作基本上已经是子操作,因为您返回了部分视图。但是,您应该使用[ChildActionOnly]进行装饰,以防止对其进行直接URL访问,因为它只返回部分视图(没有布局)。

那就是说,你需要做的就是把你的Html.Partial电话改为:

@Html.Action("Index", "ControllerIndexIsIn")

然后,这将导致您的索引操作实际运行,并且部分视图将使用结果进行解析。

答案 2 :(得分:0)

你需要调用@ html.RenderAction(&#34; Action&#34;,&#34; Controller&#34;)这将调用控制器动作并返回结果部分视图,你调用它的方式通过在一个没有任何东西可以循环渲染

的空模型中