【问题标题】:Retrieving selected item text within a JsonResult function在 JsonResult 函数中检索选定的项目文本
【发布时间】:2011-03-04 18:03:26
【问题描述】:

我正在使用 JQGrid 插件创建一个带有表的 MVC 项目。我想使用 DropDownList 允许用户指定一个值,该值将在 SQL 查询中用于从表中检索特定数据。 IE。用户可以从列表中选择一个国家,表格将只显示来自该国家的项目。

我的问题是,我无法弄清楚如何从 DropDownList 中检索所选项目,在我的表的数据绑定函数中,在我的控制器类中。

视图中的DropDownList

<%= Html.DropDownList("Countries")%>

在我的控制器中设置下拉列表

//dt is a DataTable which holds the values for my list
List<SelectListItem> countries = new List<SelectListItem>();
for (int i = 0; i < dt.Rows.Count; i++)
    countries.Add(new SelectListItem { Text = dt.Rows[i][0].ToString(), Value = "" + i });

我想访问所选值的 JsonResult DataBind() 方法

public JsonResult Charges_DataRequested()
{
    string country = "Dropdownbox Selected Text";
}

问题似乎是在 JsonResult 函数中我无权访问 ViewData 或我的 ViewModel,当我尝试访问它们时它们似乎总是为空。我是 MVC 和 Web 开发的新手,非常欢迎任何建议。

【问题讨论】:

  • ViewModel 未绑定,因为未发生提交。如果你想这样做,你将不得不自己解析页面字段,并将结果数据传递给Charges_DataRequested()
  • 我正在使用 JQGrid 插件,它在网格绑定数据时调用此方法(我假设在他们的脚本中的某处)。我无权访问它,因此我无法将自己的值传递给 Charges_DataRequested() 函数。
  • 所以您需要访问网格之外的数据?我认为你需要为此做一个整页的帖子。
  • 我需要一种在我的控制器的 jsonresult 函数中从视图访问数据的方法。我的下拉列表位于与网格分开的表单上。我希望能够调用“public JsonResult Charges_DataRequested(FormsCollection collection)”并获取数据。但这似乎只适用于 actionresult 函数,而不是 jsonresult。

标签: c# .net asp.net asp.net-mvc drop-down-menu


【解决方案1】:

感谢您的回答,它让我走上了正轨。我意识到网格也有一个 postdata 参数。我能够为我的下拉列表创建一个 javascript 回发函数,并调用 jqGrid 'setGridParam' 函数将我的下拉列表文本添加到网格 postdata。我还可以触发网格重新加载,并在我的控制器 Jsonresult 函数中获取字符串。

Javascript

$('#Countries').change(function() {
        var value = $("#Countries option:selected").text();
        $("#ChargesGrid").setGridParam ({
            postData:{
                selectedCountry:$("#Countries option:selected").text()}
        });

        $("#ChargesGrid").trigger("reloadGrid");
        alert(value);
    });

控制器

public JsonResult Charges_DataRequested(string selectedCountry)
    {
        string country = selectedCountry;
    }

【讨论】:

    【解决方案2】:

    jqGrid 有一个 userdata 属性,您可以在其中存储这些数据,以便在发布时使用。这可能意味着您必须更新此下拉列表更改。

    jQuery("#GridId").getGridParam('userData').SelectedText
    

    我只用这个另一个来设置加载数据,但我认为它可以反过来为你工作。在创建网格 json 时,我会在控制器操作中设置上面的 SelectedText

    userdata = new { SelectedText = "SomeValue" }
    

    唯一的问题是如果它是 jqGrid 代码中的私有集合等价物。

    【讨论】:

    • 已删除评论 - 改为添加答案
    • @Joe 很高兴为您提供帮助,猜测您的答案会更好地记录在案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 2013-07-20
    • 2011-01-16
    • 1970-01-01
    • 2019-06-08
    相关资源
    最近更新 更多