尝试基于DropDownList选择显示动态WebGrids - ASP.Net MVC4

时间:2014-01-20 10:12:36

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

我的索引视图有一个填充的ClientIDs DropDownList。我的目的是在选择其中一个ClientID时动态显示电子邮件地址的WebGrid。使用以下jQuery代码,我成功地进入了一个名为PopulateEmailAddressUI的控制器操作。

jQuery(document).ready(function () {
    $("#MeditechDropDown").change(function () {
        var id = $(this).find(":selected").val()
        var clientID = { "clientID": id }
        $.ajax({
            url: "/Home/PopulateEmailAddressUI",
            data: JSON.stringify(clientID), // Send value of the drop down change of option
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            success: function (response) {
                $('#gridContent').load()
            }
        });
    });
});

我的控制器操作如下:

[HttpPost]
public ActionResult PopulateEmailAddressUI(string clientID)
{
    _clientModel = InitialiseBarClientsModel();

    _clientModel.FindEmailAddresses(from client in eFormsDB.BAR_Clients where client.ClientId == clientID select client);

    return PartialView("_EmailAddressGrid", _clientModel);
}

我的_EmailAddressGrid局部视图如下所示:

@model BarClients.Models.BarClientsViewModel

@{
    var grid = new WebGrid(Model.EmailAddressesOfChosenClient, ajaxUpdateContainerId: "gridContent");
}

    div id="gridContent"
    @grid.GetHtml()  
    /div (arrows omitted).

我采用这种方法遇到的麻烦是没有WebGrid出现过。如果我查看页面源代码,我看到的只是带有ClientIDs的索引视图,但没有div为gridContent的元素。

每次从DropDownList中选择ClientID时,我需要做出哪些更改以便我可以动态显示不同的WebGrids?

非常感谢。

2 个答案:

答案 0 :(得分:1)

您的代码是对的,但您忘记使用回复。检查此代码:

 success: function (response) {
   $('#gridContent').load()
 }

该函数内部的行无效......并且您没有使用响应。

替换为:

 success: function(html) {
   $("#gridContent").html(html);
 }

您可以使用此代码或任何DOM ReplacementDOM Insertion, Inside或其他任何内容。

建议将参数dataType:'html'包含在jquery ajax调用中,以表明您希望将html作为响应。 (注意:我已调用函数参数html来指示原始响应为html,但您可以为其指定您喜欢的名称。

您还应该为ajax调用添加错误处理程序。您可以使用$.ajaxSetup()全局执行此操作。这样,如果通信或服务器出现问题,您将收到一些反馈。

答案 1 :(得分:0)

嗨,这是我完整的工作解决方案。

索引视图如下所示:

@model BarClients.Models.BarClientsViewModel

@{
    ViewBag.Title = "Index";
}

(索引视图的许多项目在此处删除,但部分显示如下)。

@{Html.RenderAction("EmailAddressGrid", "Home");}

My Partial view _EmailAddressGrid.cshtml如下所示:

@model BarClients.Models.BarClientsViewModel

@{
    WebGrid grid = null;
    if (Model.EmailAddressesOfChosenClient.Count<string>() != 0)
    {
        grid = new WebGrid(Model.EmailAddressesOfChosenClient, ajaxUpdateContainerId: "gridContent");
    }
}

div id="gridContent" (arrows omitted)
@{ if (grid != null)
   {
      @grid.GetHtml()  //work to be done here
   }
}
div (arrows ommitted)

我的两个控制器动作如下:

[HttpPost]
public ActionResult PopulateEmailAddressUI(string clientID)
{
    _clientModel = InitialiseBarClientsModel();

    _clientModel.FindEmailAddresses(from client in eFormsDB.BAR_Clients where client.ClientId == clientID select client);

    return PartialView("~/Views/Shared/_EmailAddressGrid.cshtml", _clientModel);
}

public ActionResult EmailAddressGrid()
{
   _clientModel = InitialiseBarClientsModel();
   return PartialView("~/Views/Shared/_EmailAddressGrid.cshtml", _clientModel);
}

我的jQuery函数(感谢Jotabe)如下:

jQuery(document).ready(function () {
    $("#MeditechDropDown").change(function () {
        var id = $(this).find(":selected").val()
        var clientID = { "clientID": id }
        $.ajax({
            url: "/Home/PopulateEmailAddressUI",
            data: JSON.stringify(clientID), // Send value of the drop down change of option
            type: 'POST',
            datatype: 'html',
            contentType: 'application/json; charset=utf-8',
            success: function (response) {
                $('#gridContent').html(response)
            }
        });
    });
});

JotaBe的提示和其他一些网络研究让我来到这里。我现在基于在Index视图中从DropDownList中选择或重新选择的ClientID,在Index视图上动态更改WebGrids。