0

我正在寻找将算术表达式存储到数据库中。我有这个数据库结构:

Expression
=======
id
name

Operand
=======
id
expressionId
value
side (indicates if the operand is on the left or right side of the expression)
idx (the index to identify the order of operands on each side)

Operator
========
id
expressionId
type
side
idx

在我的视图中,我希望通过根据请求向页面动态添加控件,为用户提供创建具有可变数量的操作数和运算符的表达式的能力。如果用户单击“添加操作数”按钮,将通过 javascript 为运算符生成一个下拉列表,并为操作数生成一个文本框。

我的想法是在我的表达式的创建操作中使用自定义模型绑定并使用视图模型:

public class ExpressionCreateViewModel
{
IEnumerable<ExpressionOperator> Operators { get; set; }
IEnumerable<ExpressionOperand> Operands { get; set; }
Expression Expression { get; set; }
}

模型绑定器可以使用它:

public class ExpressionCreateViewModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var vm = new ExpressionCreateViewModel();
        //Build it!
    }

我担心的是我必须如何将动态生成的控件的值传递到这个视图模型中。我能想到的唯一方法是创建提供所有详细信息的控件 ID(例如 <input type="text" id="operand:1$side:left">)

然后我可以解析表单集合中的项目,并按照惯例构建操作数和运算符对象。

有没有人有更清洁的方法来做到这一点?

谢谢!

克里斯

4

1 回答 1

0

在视图模型中绑定到集合属性的常规方法是在 Html 元素的命名中使用数组表示法。例如:

<input type="text" id="someId1" name="Operators[0].Type" />
<input type="text" id="someId2" name="Operators[1].Type" />

根据您的需要,默认活页夹甚至可以为您完成这项工作。

于 2012-11-24T06:59:50.677 回答