1

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

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

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

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

我想我可以使用内嵌编辑的 Telerik 网格来做到这一点。不幸的是,每个字段的可用选项列表将根据为其他字段选择的值而变化。我无法使用 InCell 编辑来完成这项工作,因为我无法从我的 javascript 事件处理程序中访问其他 ui 元素。

我也尝试通过正常的内联编辑来做到这一点,但唯一返回的项目是要添加的新订单。我无法访问 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);
        }
    }
4

1 回答 1

1

不要浪费您的时间来使用一些小部件来实现这一点 - 更好地检查如何将项目集合发送到服务器并使用复选框左右实现您自己的表单。

如果您想使用一些小部件 - 您可以以类似于此演示的方式尝试 Grid 。

于 2013-03-07T19:17:31.923 回答