5

前払い商品セールを行っています。ディーラーはサブディーラーを持つことができ、ディーラーは各製品の価格を設定でき、各製品の最大義務を負うことができます。今、販売ページの mvc c# サイト プロジェクトで、最初の ddl から製品をチャッキングするときに 2 つの DropDowmList を使用するのが好きです。他の ddl (彼が販売する製品の量) をデータベースから接続する必要があります。

編集: たとえば、ディーラーは販売する 3 つの製品を持っています: productA - 販売する 5 ユニット productB - 20 productC - 15

次のような新しいモデルを作成しようとしています。

    public int ProductObligoByDealerID { get; set; }

    public int DealerID { get; set; }
    public virtual Dealer Dealer { get; set; }

    public int ProductID { get; set; }
    public virtual Product Product { get; set; }

    public uint MonthObligo { get; set; }

しかし、この 2 つの ddl を一緒に接続することはできません。

編集:

他の ddl リソース リストと同様に、ViewBag でこれを実行しようとしました。

var AllObligoProdact = db.ProductObligo.Where(p => p.DealerID == currentDealer.DealerID);

foreach (var item in AllObligoProdact)
 ViewBag.ProductObligo[item.Product.ProductID].max = item.MonthObligo;

そしてcshtml側で

    <div class="editor-label">
        @Html.LabelFor(model => model.DealerProductID)
    </div>
    <div class="editor-field">
        @Html.DropDownList("DealerProductID", string.Empty)
        @Html.ValidationMessageFor(model => model.DealerProductID)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.NumOfMonth)
    </div>
    <div class="editor-field">
        @*Html.EditorFor(model => model.NumOfMonth)*@
         @Html.TextBoxFor(model => model.NumOfMonth , new {type="number",min="0",max=ViewBag.ProductObligo[Model.DealerProductID].max })

             @*.DropDownList("NumOfMonth", string.Empty)*@
        @Html.ValidationMessageFor(model => model.NumOfMonth)
    </div>

しかし、私はまだ何も得られません:/データベースで新しいテーブルを使用することをお勧めしますか、これを行うためのより良い方法がありますか?

4

2 に答える 2

10

まず、ViewBag(ドロップダウン リストの) データをコントローラーからビューに転送するために、 を取り除きます。それを ViewModel のプロパティとして追加します。

public class ProductSale
{  
   public IEnumerable<SelectListItem> Products{ get; set; }
   public int SelectedProduct { get; set; }

   public IEnumerable<SelectListItem> SaleNumbers{ get; set; }
   public int SelectedSaleNumber { get; set; }

   //Other Existing properties also.

  public ProductSale()
  {
     Products=new List<SelectListItem>();
     SaleNumbers=new List<SelectListItem>();
  }
}

GET アクションで Products コレクションを設定し、それをビューに送信します。

public ActionResult Add()
{
  var vm=new ProductSale();
  //The below code is hardcoded for demo. you mat replace with DB data.
  vm.Products= new[]
  {
    new SelectListItem { Value = "1", Text = "Product A" },
    new SelectListItem { Value = "2", Text = "Dealer B" },
    new SelectListItem { Value = "3", Text = "Product C" }
  };      
  return View(vm);
}

そして、強く型付けされたビューでは、

@model ProductSale
@using(Html.Beginform())
{
  @Html.DropDownListFor(x => x.SelectedProduct, 
     new SelectList(Model.Products, "Value", "Text"), "Select Product")

  @Html.DropDownListFor(x => x.SelectedSaleNumber, 
     new SelectList(Model.SaleNumbers, "Value", "Text"), "Select Number to sell")

  <input type="submit" />
}

ここで、ユーザーがドロップダウンから 1 つの製品を選択したときに販売する Numbers をロードするための JavaScript が必要です。このビュー (またはレイアウト ビュー) にjQueryライブラリを含め、この Java スクリプトをビューに追加します。

<script type="text/javascript">
    $(function () {
        $("#SelectedProduct").change(function () {
            var self = $(this);
            var items="";
            $.getJSON("@Url.Action("GetSaleNumbers","Product")/"+self.val(),
                                                                function(data){
              $.each(data,function(index,item){
                items+="<option value='"+item.Value+"'>"+item.Text
                                                                    +"</option>";
              });
              $("#SelectedSaleNumber").html(items);
            });
        });
    });
</script>

それが行うことはchange、最初のドロップダウンのイベントをリッスンし、それが発生すると、getJSONメソッド (含まれている jquery ライブラリに記述されています) を使用して GET 呼び出しを行い、結果をJSON形式で取得して解析し、それを追加します2 番目のドロップダウン。

製品のIDを受け取り、その製品のすべての製品販売番号をフォーマットで送信するコントローラーGetSaleNumbersのアクションメソッドであると仮定します。ProductJSON

public ActionResult GetSaleNumbers(int id)
{
  List<SelectListItem> saleNumbers=new List<SelectListItem>();
  //The below code is hardcoded for demo. you mat replace with DB data 
  //based on the  input coming to this method ( product id)
  saleNumbers.Add(new SelectListItem { Value="1" , Text="1" }, 
                  new SelectListItem { Value="2" , Text="2" }, 
                  new SelectListItem { Value="3" , Text="2" }
                 );
  return Json(saleNumbers,JsonRequestBehavior.AllowGet);
} 
于 2012-09-03T17:56:00.127 に答える
1

JavaScriptを記述し、最初のドロップダウンリストの更新(選択の変更)でサーバーへのajax呼び出しを実行して、データベースからデータを取得し、このデータで2番目のドロップダウンリストを更新する必要があります。

于 2012-09-03T14:03:41.683 に答える