我希望用户能够在表单中构建客户端项目列表,然后在提交表单时将整个列表发送到服务器。
每个项目都有几个可以设置的属性。例如,这是一个 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);
}
}