ユーザーがフォームのクライアント側でアイテムのリストを作成し、フォームが送信されたときにリスト全体をサーバーに送信できるようにしたいと考えています。
各項目には、設定可能ないくつかのプロパティがあります。たとえば、注文モデルは次のとおりです。
class Order
{
int Id;
string Description;
Guid UserId;
string Product;
}
ユーザーは、フォームを送信する前に、必要な数の注文を追加および構成できる必要があります。
InCell 編集を使用して、Telerik グリッドでこれを行うことができると考えました。残念ながら、各フィールドで使用できるオプションのリストは、他のフィールドで選択した値に基づいて変わります。JavaScript イベント ハンドラーから他の UI 要素にアクセスできなかったため、InCell 編集でこれを機能させることができませんでした。
通常の InLine 編集でもこれを実行しようとしましたが、返されるアイテムは追加される新しい Order だけです。GridModel にアクセスして新しい Order を追加できませんでした。ユーザーが編集を完了するまで、注文リストを保持したくありません。
どんな助けでも大歓迎です。
編集: 独自のリストを作成するソリューションを使用すると、カスケード コンボボックスでこの問題が発生します。各コンボボックスには、リスト内のインデックスに基づいて「UserId_0」のような名前が付けられます。
しかし、どうすれば下流のリストを取得できますか?
ここに私の2つのコンボボックスがあります:
<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);
}
}