0

MVC アプリケーション内で Infragistics コンボボックスを作成しようとしています。

ビュー内のコードは次のとおりです。

@using (Html.BeginForm())
{
    <h4>Choose a customer:</h4>
    <div id="table">
    @Html.Infragistics().ComboFor(item => Model)
        .ID("comboBox")
        .Width("270px").ID("customerCombo")
        .DataSourceUrl(Url.Action("GetAllCustomerData", new { ibu = ViewBag.IBU }))
        .ValueKey("nat_acc_nbr")
        .TextKey("nat_acc_nbr")
        .ResponseDataKey(null)
        .DataBind()
        .Render();
    </div>
    <input id="submitButton" type="submit" value="query" />
}

コントローラー内の GetAllCustomerData メソッドは次のとおりです。

    [AuthorizeEagleUser]
    [HttpGet]
    public JsonResult GetAllCustomerData(string ibu)
    {
        bool authorized = SecurityCheck(ibu);

        if (authorized)
        {
            IQueryable<AllCustomersModel> customers = new AllCustomersData().fillModel(ibu);

            JsonResult result = new JsonResult()
            {
                Data = customers,
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
            return result;
        }
        else return null;
    }

そのメソッドを使用してプルされたデータを使用して基本的な HTML テーブルを作成できたため、fillModelメソッド (実際の SQL クエリを含み、実行する) が正常に機能することを確認しました。また、コードをステップ実行すると、authorized は (私にとっては) true を返します。

nat_acc_nbrフィールドは、プルされたデータの主キーです。

@Html.Infragistics問題は、「パラメータ 'id' を空にすることはできません」というArgumentException が引き続き発生することです。この ID がどこにあるのかを調べようとしましたが、これを理解できないようです。前もって感謝します!

4

1 に答える 1

0

エラーは少しあいまいですが、一般的には「定義したモデルのプロパティが見つかりません」を表していると思います。基本的に、コンボを定義するには 2 つの方法があります。MVC の既定のエディターと同じように、厳密に型指定されます ( ASP.NET MVC ヘルパー サンプルで見たように、コードはComboFor< TProperty >()を使用して達成しようとしています) 。また、モデルにバインドされていないコンボを実行することもできます。使用する式は、モデル全体を使用するプロパティとして割り当てます..これはまったく機能するかどうかわかりません。

1) 強く型付けされたコンボ (フォームの送信に便利) が必要な場合は、モデルを定義して、ヘルパーが型を推測し、それを選択できるようにする必要があります。

@model AllCustomersModel

2) サーバー側のデータにバインドしていないため、DataBind() 呼び出しは必要ありません。

3) 複数の行でチェーンを使用する場合は、括弧で囲む必要があります。

@(Html.Infragistics().ComboFor(item => item.nat_acc_nbr)
   .ID("comboBox")
   .Width("270px").ID("customerCombo")
   .DataSourceUrl(Url.Action("GetAllCustomerData", new { ibu = ViewBag.IBU }))
   .ValueKey("nat_acc_nbr")
   .TextKey("nat_acc_nbr")
   .ResponseDataKey(null)
   .Render())

4) コンボでフォームを送信する必要がない場合は、単純なコンボを使用してモデル宣言をスキップできます。

@(Html.Infragistics().Combo()
   .ID("comboBox")
   .Width("270px").ID("customerCombo")
   .DataSourceUrl(Url.Action("GetAllCustomerData", new { ibu = ViewBag.IBU }))
   .ValueKey("nat_acc_nbr")
   .TextKey("nat_acc_nbr")
   .ResponseDataKey(null)
   .Render())

ヘルプ ドキュメントも参照してください: igComboの追加

于 2014-04-11T15:41:17.783 に答える