C# 连接两个下拉列表mvc 4
我有一个preepay产品销售。 经销商可以有次级经销商 经销商可以为每种产品设定价格 每种产品他都有max obligo。 现在我喜欢在我的mvc站点项目的销售页面上有两个DropDowmList 当我从第一个ddl中检查产品时,我希望我的另一个ddl(他必须销售多少产品)与我的db连接 编辑: 例如,经销商有三种产品可供销售: productA-5个待售单元 产品B-20 产品C-15 当他在第二个ddl或textboxForNumber(最小值、最大值)上选择productB时,他应该看到从1到20的范围 我尝试创建一个新模型,如下所示:C# 连接两个下拉列表mvc 4,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我有一个preepay产品销售。 经销商可以有次级经销商 经销商可以为每种产品设定价格 每种产品他都有max obligo。 现在我喜欢在我的mvc站点项目的销售页面上有两个DropDowmList 当我从第一个ddl中检查产品时,我希望我的另一个ddl(他必须销售多少产品)与我的db连接 编辑: 例如,经销商有三种产品可供销售: productA-5个待售单元 产品B-20 产品C-15 当他在第二个ddl或textboxForNumber(最小值、最大值)上选择productB时,他应该看到
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; }
但我无法将这两个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>
@LabelFor(model=>model.DealerProductID)
@DropDownList(“DealerProductID”,string.Empty)
@Html.ValidationMessageFor(model=>model.DealerProductID)
@LabelFor(model=>model.numoforn)
@*EditorFor(model=>model.NumOfMonth)*@
@Html.TextBoxFor(model=>model.NumOfMonth,新{type=“number”,min=“0”,max=ViewBag.ProductObligo[model.DealerProductID].max})
@*.DropDownList(“NumOfMonth”,string.Empty)*@
@Html.ValidationMessageFor(model=>model.NumOfMonth)
但我还是一无所获:/
在数据库中使用一个新表是一个好主意,或者有更好的方法来做到这一点?您必须编写javascript,并在第一次下拉列表更新(选择更改)时对服务器进行ajax调用,以从数据库获取数据,用此数据更新第二个下拉列表 首先,我要去掉
ViewBag
,将数据(用于Dropdownlist)从控制器传输到视图。我会将其添加为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>();
}
}
在您的强类型视图中
@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" />
}
如果我想在他选择一种产品后进行求和逻辑也是一样的(例如,如果他有义务说100美元,他可以销售50ProductA或30productB等)?
@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" />
}
<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>
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);
}