我希望用户能够在表单中构建客户端项目列表,然后在提交表单时将整个列表发送到服务器。
每个项目都有几个可以设置的属性。例如,这是订单模型:
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);
}
}
答案 0 :(得分:1)
不要浪费时间通过一些小部件实现这一目标 - 更好地检查如何发送collection of items to the server并使用复选框左右实现您自己的表单。
如果您想使用某些小部件 - 您可以采用与此demo类似的方式尝试网格。