0

我正在尝试在 MVC 应用程序中创建一个 Infragistics 组合框。

这是视图中的代码:

@using (Html.BeginForm())
{
    <h4>Choose a customer:</h4>
    <div id="table">
    @Html.Infragistics().ComboFor(item => Model)
        .ID("comboBox")
        .Width("270px").ID("customerCombo")
        .DataSourceUrl(Url.Action("GetAllCustomerData", new { ibu = ViewBag.IBU }))
        .ValueKey("nat_acc_nbr")
        .TextKey("nat_acc_nbr")
        .ResponseDataKey(null)
        .DataBind()
        .Render();
    </div>
    <input id="submitButton" type="submit" value="query" />
}

这是控制器中的 GetAllCustomerData 方法:

    [AuthorizeEagleUser]
    [HttpGet]
    public JsonResult GetAllCustomerData(string ibu)
    {
        bool authorized = SecurityCheck(ibu);

        if (authorized)
        {
            IQueryable<AllCustomersModel> customers = new AllCustomersData().fillModel(ibu);

            JsonResult result = new JsonResult()
            {
                Data = customers,
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
            return result;
        }
        else return null;
    }

我已经验证了该fillModel方法(包含并执行实际的 SQL 查询)确实可以正常工作,因为我已经设法使用使用该方法提取的数据创建了一个基本的 HTML 表。此外,当我单步执行代码时,authorized 确实返回 true(对我而言)。

nat_acc_nbr字段是提取数据的主键。

问题是我不断收到 ArgumentException@Html.Infragistics在线,说“参数 'id' 不能为空。” 我试图找到这个 id 的位置,以便我可以填充它,但我似乎无法弄清楚这一点。提前致谢!

4

1 回答 1

0

该错误有点模糊,但我认为它通常代表“我找不到您定义的模型的属性”。本质上,有两种方法可以定义组合 - 强类型,就像使用 MVC 的任何默认编辑器一样(正如您在ASP.NET MVC Helper 示例中看到的,并且您的代码试图使用ComboFor< TProperty >()来实现)你也可以做一个不绑定到你的模型的组合。您使用的表达式将整个模型分配为要使用的属性..我不确定这是否会起作用。

1)如果您想要强类型组合(对表单提交有用),您应该定义您的模型,以便助手可以推断类型并且您可以选择它:

@model AllCustomersModel

2)您没有绑定到服务器端数据,因此不需要 DataBind() 调用。

3)如果你想在多行上使用链接,你应该把它括在括号中:

@(Html.Infragistics().ComboFor(item => item.nat_acc_nbr)
   .ID("comboBox")
   .Width("270px").ID("customerCombo")
   .DataSourceUrl(Url.Action("GetAllCustomerData", new { ibu = ViewBag.IBU }))
   .ValueKey("nat_acc_nbr")
   .TextKey("nat_acc_nbr")
   .ResponseDataKey(null)
   .Render())

4)如果您不需要使用组合提交表单,您可以使用简单的组合并跳过模型声明:

@(Html.Infragistics().Combo()
   .ID("comboBox")
   .Width("270px").ID("customerCombo")
   .DataSourceUrl(Url.Action("GetAllCustomerData", new { ibu = ViewBag.IBU }))
   .ValueKey("nat_acc_nbr")
   .TextKey("nat_acc_nbr")
   .ResponseDataKey(null)
   .Render())

您可能还想查看帮助文档:添加 igCombo

于 2014-04-11T15:41:17.783 回答