下拉列表是否可以在mvc中创建视图表单时触发要更新的部分视图?

时间:2017-01-30 23:00:42

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

我尝试应用于创建视图表单的选项是用户从创建的下拉列表中选择一个项目,从记录写入数据库之前,并从下拉列表中选择他们的记录创建视图窗体上的列表隐藏在此窗体上的局部视图变为可见,并显示viewbag中的值。

由于我在此之前已经寻求帮助,因此问题很清楚目标是什么以及这是否可以防止发生,因为这可能是mvc方法中的限制因为mvc适用于手机小型设备。我在一台完整的电脑上构建这个应用程序。有人说可以做到。我正在使用viewbag,因为这是我唯一理解的东西。我不了解模型概念,我也不知道ajax是什么或如何使用。我只知道如何做javascripting函数,就像我看过w3schools的例子一样。

到目前为止,

我的部分视图中有类似的东西:叫_IssuesListPartial

<table cellpadding="1" border="1">
    <tr>
        <th>
           Issues List 
        </th>

    </tr>

    @foreach (SystemX.Models.VUE_ISSUE_LIST_FULL item in ViewBag.IssuesList)
    {
        <tr>
            <td>
                @item.ISSUE_DISCRIPTION
            </td>            
        </tr>
    }
</table>

在我的crated Controller代码后面,我在create选项下有几个项目 我有一个功能,可以为视图包制作一个列表。

    private List<VUE_ISSUE_LIST_FULL> Get_IssuesList(int? VID)
    {

        return db.VUE_ISSUE_LIST_FULL.Where(i => i.ID == VID).ToList();
    }

然后我将结果分配给另一个以动作结果开头的函数中的视图包。它叫做UpdateIssuesList:

这是在控制器的创建逻辑下。我看到类似他们有一个[HttpPost],但是当创建表单试图渲染时我得到一个错误,所以我把它更改为[HttpGet]它工作,并创建为负载。我不确定[HttpGet]或[HttpPost]是否...我只知道创建表单加载[HttpGet]

所以在创建函数下的控制器中我有这个。请记住,我拥有脚手架制造商为创建视图制作的所有其他内容。我刚刚在它下面添加了这个代码。

    [HttpGet]
    public ActionResult UpdateIssuesList(int? VID)
    {


        ViewBag.IssuesList = Get_IssuesList(VID);
        return PartialView("_IssuesListPartial",ViewBag.IssuesList);


    } 

在创建表单视图中,我的项目数量很少...表单上我希望此列表显示的区域何时显示:

在函数public ActionResult下创建我有:

 public ActionResult Create(int RES_ID, FormCollection Collection, [Bind(Include = "R.... and so on...

 UpdateIssuesList(int.Parse(Collection["RES_ID"]));

并在公共ActionResult Create()下我有: 函数调用UpdateIssuesList函数..我只是发送一个随机值来构建一个空白列表。

UpdateIssuesList(808);

另外

这是我想要渲染局部视图的创建视图表单的代码:

        <div class="col-sm-6">

            <div class="form-horizontal" style="display:none" id="PV_IssueList">

                @{ Html.RenderAction("UpdateIssuesList",new {@VID = 1 });}

            </div>
        </div>

当用户对创建视图表单上的下拉列表进行更改时,我还在创建视图的脚本部分中创建了运行后面的代码。最终目标是当用户单击并更改下拉列表中的项目时...值将获取id值发送给列表制作者并生成新的最后一个,并将该新列表传递给局部视图和表单已更新。

    $(document).ready(function () {
        $('#RES_ID').change(function ()
        {
            debugger;
            $("#PV_IssueList").show(); // Shows List
            $.post("/Create/_IssuesListPartial?VID=1")


        });
    })

mvc是否有可能更新创建,因为那里什么都没有?没有代码或事件触发器会在提交表单之前刷新部分视图因此mvc可能无法实现这一点,而我正浪费时间尝试。我刚刚打破了人们的想法,因为我没有看到在创建视图中呈现列表的实际示例,所以我在这里追逐风车。感谢您花时间阅读本文。

因此,当我运行此代码后,在选择了部分视图的头文本但是列表数据的值之后,我进入了页面。当我单步执行时,我会在变量和内容中获取数据,但不会在创建视图表单中的屏幕上获取数据

1 个答案:

答案 0 :(得分:0)

好的,由于某种原因,答案被删除了,所以我会尝试以不同的方式回答。我得到这个工作的方式首先是在这个表格和其他形式的用户的帮助下以及一些研究。正如所建议的,使用ajax语言是一个很大的帮助。

这是背后的Ajax代码:

$(document).ready(function () {
    $('#RES_VID').change(function ()
    {

        debugger;

        $.ajax(

            {
                url: '@Url.Action("UpdatePartialViewList")',
                type: 'GET',
                data: { VID: $('#RES_VID').val() },

                success: function (partialView)
                {
                    $('#PV_WidgetList').html(partialView);
                    $('#PV_WidgetList').show();
                }
            });

所以要分解这里发生的事情是我在我的控制器中有一个名为UpdatePartialViewList的函数,这个函数传回一个局部视图及其视图包:

控制器中的功能如下:

[HttpGet]
public ActionResult UpdatePartialViewList(int? VID)
{           

    ViewBag.AList = Get_List(VID);
    return PartialView("_WidgetListPartial",ViewBag.AList);


}

所以有了这两个项目,你就像是一个占位符。因为这会将信息传递回页面。所以在我的创建视图中我有这个:

UpdatePartialViewList(int.Parse(集合[&#34; RES_VID&#34;])); 在您希望部分视图显示的创建视图屏幕上

    <div class="col-sm-6">

        <div class="form-horizontal" style="display:none" id="PV_WidgetList">

            @{ Html.RenderAction("UpdatePartialViewList");}



        </div>
    </div>

希望这有助于其他用于webforms并试图获得整个mvc的东西。祝福!