【问题标题】:Multiple partial view rendering多个局部视图渲染
【发布时间】:2014-09-26 03:40:21
【问题描述】:

我有三个下拉列表 - 项目、冲刺、故事。 Sprint 下拉列表将根据选择的 Project 进行绑定,Story 下拉列表将根据选择的 Sprint 进行绑定。在选定的故事的基础上,我想显示一个 webgrid。

我正在做的是: 我的项目下拉列表在主视图页面上,Sprint 下拉列表和故事下拉列表是两个不同的部分视图。当我从项目中选择时,在 jquery 中获取选定的值并传递给控制器​​:

$('#Project').change(function (e) {
    e.preventDefault();
    var selectedVal = $("#Project").val();
    $.ajax({
        url: "/Task/BindSprintList",
        data: { projectTitle: selectedVal },
        type: 'Get',
        success: function (result) { 
                $('#ViewGrid').html(result);
        },
        error: function () {
            alert("something seems wrong");
        }
    });
});

现在 Sprint 下拉列表出现。当我从 Sprint 中选择时,选择的值在 jquery 中获取并传递给控制器​​:

$('#Sprint').change(function (e) {
    e.preventDefault();
    var selectedProjectVal = $("#Project").val();
    var selectedSprintVal = $("#Sprint").val();
    $.ajax({
        url: "/Task/BindStoryList",            
        data: { projectTitle: selectedProjectVal, sprintTitle: selectedSprintVal },
        type: 'Get',
        success: function (result) { 
            $('#ddlStory').html(result);            },
        error: function (err) {
            alert("something seems wrong "+ err);
        }
    });
});

但现在 Story Dropdownlist 没有显示。

MainPage.cshtml

<table>
    @{
        if (ViewBag.ProjectList != null)
        {
            <tr>
                <td>
                    <h4>SELECT PROJECT&nbsp; &nbsp; &nbsp; &nbsp;</h4>
                </td>
                <td>
                    @Html.DropDownList("Project", new SelectList(ViewBag.ProjectList, "Value", "Text"), " -- Select -- ")
                </td>
            </tr>
        }
        if (ViewBag.SprintList != null)
        {
            Html.RenderPartial("PartialSprintDropDown", Model.AsEnumerable());
        }
        if (ViewBag.StoryList != null)
        {
            Html.RenderPartial("PartialStoryDropDown", Model.AsEnumerable());
        }
    }
</table>

PartialSprintDropDown.cshtml

<table>
    <tr>
        <td>
            <h4>SELECT SPRINT</h4>
       </td>
       <td>
           &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@Html.DropDownList("Sprint", new SelectList(ViewBag.SprintList, "Value", "Text"), " -- Select -- ")
       </td>
    </tr>      
</table>
<script src="~/Script/Task/IndexTask.js" type="text/javascript"></script>

PartialStoryDropDown.cshtml

<div id="ddlStory">
    <table>
        <tr>
            <td>
                <h4>SELECT STORY</h4>
           </td>
           <td>
               &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@Html.DropDownList("Story", new SelectList(ViewBag.StoryList, "Value", "Text"), " -- Select -- ")
           </td>
        </tr>      
    </table>
</div>
<script src="~/Script/Task/IndexTask.js" type="text/javascript"></script>

谁能告诉我为什么没有显示 Story DropdownList。即使在调试 PartialStoryDropDown.cshtml 时,“ViewBag.StoryList”也包含预期的数据,但未显示在页面上。

我在 Viewbag.SprintList 和 Viewbag.StoryList 中包含我的数据。 正在显示 SprintDropdownlist。

如何解决这个问题?

BindSprintList()

public ActionResult BindSprintList(string projectTitle)
        {
            try
            {
                string Owner = Session["UserName"].ToString();

                int? ProjectId = GetProjectID(projectTitle);

                var ddlSprint = new List<string>();

                List<SelectListItem> items = new List<SelectListItem>();

                var querySprint = (from sp in entities.Sprints
                                    where sp.Project_ID == ProjectId && sp.Sprint_Status != "Completed"
                                    select sp).ToList();

                foreach (var item in querySprint.ToList())
                {
                    SelectListItem li = new SelectListItem
                    {
                        Value = item.Sprint_Title,
                        Text = item.Sprint_Title
                    };
                    items.Add(li);
                }

                IEnumerable<SelectListItem> List = items;

                ViewBag.SprintList = new SelectList(List, "Value", "Text");
            }
            catch (Exception e)
            {
                var sw = new System.IO.StreamWriter(filename, true);
                sw.WriteLine("Date    ::    " + DateTime.Now.ToString());
                sw.WriteLine("Location ::  AgileMVC >> Controllers >> TaskController.cs >> public ActionResult BindSprintList(string projectTitle)");
                sw.WriteLine("Message ::    " + e.Message);
                sw.WriteLine(Environment.NewLine);
                sw.Close();
            }

            return PartialView("PartialSprintDropDown", ViewBag.SprintList);
        }

BindStoryList()

public ActionResult BindStoryList(string projectTitle, string sprintTitle)
    {
        try
        {
            string Owner = Session["UserName"].ToString();

            int? ProjectId = GetProjectID(projectTitle);

            int? SprintId = GetSprintID(ProjectId, sprintTitle);

            var ddlStory = new List<string>();

            List<SelectListItem> items = new List<SelectListItem>();

            var queryStory = (from st in entities.Stories
                                join spss in entities.SprintStories on st.Story_ID equals spss.Story_ID
                                where spss.Sprint_ID == SprintId && spss.Project_ID == ProjectId
                                select st).ToList();

            foreach (var item in queryStory.ToList())
            {
                SelectListItem li = new SelectListItem
                {
                    Value = item.Story_Title,
                    Text = item.Story_Title
                };
                items.Add(li);
            }

            IEnumerable<SelectListItem> List = items;

            ViewBag.StoryList = new SelectList(List, "Value", "Text");
        }
        catch (Exception e)
        {
            var sw = new System.IO.StreamWriter(filename, true);
            sw.WriteLine("Date    ::    " + DateTime.Now.ToString());
            sw.WriteLine("Location ::  AgileMVC >> Controllers >> TaskController.cs >> public ActionResult BindStoryList()");
            sw.WriteLine("Message ::    " + e.Message);
            sw.WriteLine(Environment.NewLine);
            sw.Close();
        }

        return PartialView("PartialStoryDropDown", ViewBag.StoryList);
    }

【问题讨论】:

  • 介意分享您的 BindStoryList 和 BindSprintList 操作吗?
  • 看起来您正试图在下拉列表中显示table(由$('#ddlStory') 和您的部分视图的html 猜测。
  • 实际上@Mrchief ...我认为ishud将PartialStoryDropDown内容放在div标签中,id为“ddlStory”,这就是为什么我要显示那个...
  • 所以我想你的 HTML 会有所帮助。 ddl - 我假设代表下拉列表!
  • 我认为在您的主页中,您需要有一个 ddlStory 的占位符并替换该占位符的 html。 $('#ddlStoryWrapper').html(result) 之类的东西,其中 ddlStoryWrapper 只是页面上的一个空 div。

标签: c# jquery asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

我想我看到了你的问题 - ddlStory div 是结果的一部分。所以当你说$('#ddlStory') 时,它没有做任何事情,因为它还没有出现在页面上。

我认为在您的主页中,您需要有一个 ddlStory 的占位符并替换该占位符的 html。 $('#ddlStoryWrapper').html(result) 之类的东西,其中 ddlStoryWrapper 只是页面上的一个空 div。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多