算術式をデータベースに保存したいと思っています。私はこのdb構造を持っています:
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">)
次に、フォームコレクション内のアイテムを解析し、慣例により、オペランドオブジェクトと演算子オブジェクトを作成できます。
誰かがこれを行うためのよりクリーンな方法を持っていますか?
ありがとう!
クリス