MVC从DropDownList更改的视图动态地将Model传递给partialview

时间:2015-10-09 18:45:18

标签: jquery asp.net-mvc razor partial-views html.dropdownlistfor

它有点满口,但我认为有两个下拉列表:

<div>
@Html.LabelFor(m => m.APlayerID)
@Html.DropDownListFor(m => m.APlayerID, Model.AbzPlayers, "Please select", new { id = "abz" })
</div>  

<div>
@Html.LabelFor(m => m.EPlayerID)
@Html.DropDownListFor(m => m.EPlayerID, Model.EdzPlayers, "Please select", new { id = "edz" })
</div>

根据这些,我有一个部分观点:

<div id="partialview" class="panel-body">
@Html.Partial("SingleResultsView", Model.SingleResults)
</div>

我想根据从下拉菜单中选择的玩家来更新此部分视图,最好是在更改时。

我已经在这上面查了大量示例,但似乎找不到任何通过过滤的Model.SingleResults.Where的内容(x =&gt; x.abzID == abz&amp;&amp; x.edz == edz)通过。我的视图位于共享文件夹中,因此它没有控制器,在查找解决方案时始终存在问题,因为每个人似乎都给出了控制器/视图URL!

我能够使用类似的东西显示部分视图,但它显然没有使用abz和edz(下拉列表中的值)做任何事情,因为我不知道如何传递模型:

$(function () {

    $('#abz').change(function () {
        var value = $(this).val();


        $.ajax({
            url: "@Url.Content("Shared/SingleResultsView")",
            type: 'GET',
        cache: false,
        success: function (value) {
            $("#partialview").html(value);
        }
    });     
    });
});

帮助将非常感谢!

提前致谢

3 个答案:

答案 0 :(得分:1)

您需要一个返回局部视图的操作。部分视图本身无法做任何事情。

public ActionResult SingleResults(string abzID, string edz)
{
    // do something with the passed params
    return PartialView("SingleResultsView", model) // where model is an instance of what the view needs to render itself with
}

答案 1 :(得分:0)

一般来说,您不想尝试直接加载局部视图。为什么?嗯,这不是MVC管道的工作原理。期。相反,向控制器添加一个动作方法,生成第一个页面(具有下拉列表的页面)并具有控制器格式并将部分视图返回到您的javascript。我们假设您有一个控制器,如下所示:

public class Players : IController
{
    //This is the method that loads the first page
    public ActionMethod Index()
    {
        return View();
    }

    //This method loads the partial html on change
    [HttpPost]
    public ActionMethod GetPartialView(int? abz)
    {
        var item =  items.SingleResults.Where(x=>x.abzID == abz && x.edz == edz)
        return View("partialViewName", item);
    }
}

以上控制器使用POST(我更喜欢,但您也可以使用GET)向控制器提交请求以获取html。然后,你像这样构建你的javascript(假设是jQuery,对吧?):

$(document).ready(function () {

    $('#abz').change(function () {
        var value = $(this).val();
        $.ajax({
            url: "Players/GetPartialView",
            type: 'POST',
            data: { abz: $(this).val() }
            cache: false,
            success: function (value) {
                $("#partialview").html(value);
            }
        });     
    });
});

答案 2 :(得分:0)

您可以使用控制器操作。无论您的视图位于何处,您都可以为部分视图结果调用控制器操作,例如:

$.ajax({
        url: "@Url.Action("yourAction", "yourController", new { someinput = someValue})",
        type: 'GET', //could also be post
    cache: false,
    success: function (value) {
        $("#partialview").html(value);
    });

您的控制器操作如下:

public ActionResult SomeAction(<yourType> someInput){
...  //Do something with input
return PartialView("Shared/SingleResultsView", <your model that SingleResultsView takes>)

}

您还可以对onchange帮助程序使用DropDownFor属性:

@Html.DropDownListFor(m => m.APlayerID, Model.AbzPlayers, "Please select", new { id = "abz", onchange = "javascript: someFunction();" });