【问题标题】:Parameter 'id' cannot be empty - Infragistics combo box参数“id”不能为空 - Infragistics 组合框
【发布时间】:2014-04-07 13:59:05
【问题描述】:

我正在尝试在 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 字段是提取数据的主键。

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

【问题讨论】:

  • 您看过存储过程声明吗?在数据库中?请张贴程序声明。
  • @TMcKeown - 你说的是控制器中的GetAllCustomerData 方法吗?
  • 只是一个猜测,但 ID 应该在此处独占一行吗?
  • 打算添加它...仍然抛出相同的异常。编辑它。
  • @TMcKeown - 已编辑。

标签: asp.net-mvc razor infragistics ignite-ui


【解决方案1】:

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

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())

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

【讨论】:

    猜你喜欢
    • 2011-11-08
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 2017-12-25
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多