配置要发送到服务器的项目列表

时间:2013-03-07 15:06:15

标签: asp.net-mvc-4 telerik-mvc

我希望用户能够在表单中构建客户端项目列表,然后在提交表单时将整个列表发送到服务器。

每个项目都有几个可以设置的属性。例如,这是订单模型:

class Order
{
    int Id;
    string Description;
    Guid UserId;
    string Product;
}

用户应该能够在提交表单之前添加和配置任意数量的订单。

我以为我可以使用InCell编辑对Telerik网格执行此操作。不幸的是,每个字段的可用选项列表将根据为其他字段选择的值而更改。我无法使用InCell编辑工作,因为我无法从我的javascript事件处理程序访问其他ui元素。

我还尝试使用普通的InLine编辑执行此操作,但返回的唯一项目是要添加的新订单。我无法访问GridModel来添加新订单。在用户完成编辑之前,我不想保留订单列表。

非常感谢任何帮助。

编辑:如果我选择制作自己的列表的解决方案,我就会遇到级联组合框的问题。每个组合框的名称类似于“UserId_0”,基于列表中的索引。

但是现在如何获得下游列表呢? 这是我的两个组合框:

 <td>
        @(Html.Telerik().ComboBox()
            .Name("UserId_" + i.ToString())
            .BindTo(new SelectList(Model.UserIds, "Id", "Name"))
            .Placeholder("Select UserId...")
            .AutoFill(true)
            .CascadeTo("Product_" + i.ToString())
            .SelectedIndex(0))
 </td>
 <td>
       @(Html.Telerik().ComboBox()
            .Name("Product_" + i.ToString())
            .AutoFill(true)
            .DataBinding(binding => binding.Ajax().Select("GetProducts", "Order"))
            .Placeholder("Select Product...")
            .SelectedIndex(0))
 </td>

我的Controller方法看起来像这样。这很糟糕,但是如何获取该值呢?

    public JsonResult GetProducts(Guid? UserId)
    {
        // Hack!
        ValueProviderResult userResult = ValueProvider.GetValue("UserId");
        for (int i=0; i < 10; i++)
        {
            userResult = ValueProvider.GetValue("UserId_" + i);
            if (userResult != null)
            {
                break;
            }
        }

        if (userResult != null)
        {
            // Get list of products based on value
            return Json(new SelectList(productList, "Id", "Name"));
        }
        else
        {
            return Json(null);
        }
    }

1 个答案:

答案 0 :(得分:1)

不要浪费时间通过一些小部件实现这一目标 - 更好地检查如何发送collection of items to the server并使用复选框左右实现您自己的表单。

如果您想使用某些小部件 - 您可以采用与此demo类似的方式尝试网格。