在来自另一个下拉列表的值上填充下拉列表

Filling Dropdownlist on a value coming from another Dropdown

提问人:Mussaib Siddiqui 提问时间:7/15/2016 最后编辑:Fateme MirjaliliMussaib Siddiqui 更新时间:6/13/2020 访问量:526

问:

我有一个这些日期的下拉列表,通过在 http get 方法中应用一些过滤器来填充我的下拉列表issuedate

ViewBag.PMID1 = new SelectList(db.PRIMKT_MAST.Where(z => z.PRODUCT_ID == j && z.REC_VERIFIED == 0 && z.VERIFY_LOCK == 0 && z.TRTYPE == i), "PMID", "ISSUE_DATE");

这是我的下拉列表。

<div class="form-group">
    @Html.LabelFor(model => model.ISSUE_DATE, new { @class = "control-label col-md-2" })
    <div class="col-md-10">
          @Html.DropDownList("PMID1", null, new { @onchange = "FillTenor()" })
          @Html.ValidationMessageFor(model => model.ISSUE_DATE)
    </div>
</div>

现在我想在表格中进行选择,其中此下拉列表根据发行日期填充,例如AUCTIONIDselect auctionid where issuedate = dropdown selected value

当我们得到这个并在其他表中搜索并在此基础上填写另一个下拉列表时,例如这是我想要填写的第二个下拉列表auctionidauctionidauctionidselect Tenors(i want to select this value) where auctionid is (whatever we get from dropdown)

     <div class="form-group">
            @Html.LabelFor(model => model.TENOR_ID, "TENOR_ID", new { @class     = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownListFor(m => m.TENOR_ID,
new SelectList(Enumerable.Empty<SelectListItem>(), "AUCDT_ID", "TENOR_ID"),
              "Select Tenors",
              new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.BRANCH_ID)
            </div>
        </div>

这是我的控制器

public ActionResult Create()
{
    ViewBag.AUCTION_ID = new SelectList(db.AUCTION_DATA, "AUCTION_ID", "PRODUCT_ID");
    ViewBag.CUSTOMER_ID = new SelectList(db.CUSTOMERs, "CUSTOMER_ID", "CUSTOMER_NAME");
    ViewBag.PMID = new SelectList(db.PRIMKT_MAST, "PMID", "PRODUCT_ID");
    ViewBag.BRANCH_ID = new SelectList(db.BRANCHes, "BRANCH_ID", "BRANCH_DESC");
   //ViewData["ListofIssueDate"] = db.PRIMKT_MAST.Where(z => z.PRODUCT_ID == Session["Product_Id"] && z.REC_VERIFIED == 0 && z.VERIFY_LOCK == 0 && z.TRTYPE == Convert.ToInt32(Session["Trtype"])).Select(z => z.ISSUE_DATE);
    int i = Convert.ToInt32(Session["Trtype"]);
    string j =Convert.ToString( Session["Product_Id"]);
    ViewBag.PMID1 = new SelectList(db.PRIMKT_MAST.Where(z => z.PRODUCT_ID == j && z.REC_VERIFIED == 0 && z.VERIFY_LOCK == 0 && z.TRTYPE == i), "ISSUE_DATE", "ISSUE_DATE");
    return View();

}

我的 Ajax 电话。

    @section script {
        <script>
            function FillTenor() {
                var IssueDate = $('#PMID1').val();
                $.ajax({
                    url: '@Url.Action("FillCity", "PrimaryMarket")',
                    type: "GET",
                    dataType: "JSON",
                    data: { IssueDate: $("#PMID1").val() },
                    success: function (Tenor) {
                        $("#TENOR_ID").html(""); // clear before appending new list
                        $.each(Tenor, function (i, AUCDATA_TENORS) {
                            $("#TENOR_ID").append(
                                $('<option></option>').val(AUCDATA_TENORS.AUCDT_ID).html(AUCDATA_TENORS.TENOR_ID));
                        });
                    }
                });
            }
        </script>
    }

我的 onchange 方法

[HttpGet]        
public ActionResult FillTenor(DateTime? IssueDate)   
{
        var auctionid = db.PRIMKT_MAST.Where(c => c.ISSUE_DATE == IssueDate).Select(c=>c.AUCTION_ID).ToList();
        var Tenor = db.AUCDATA_TENORS.Where(c => c.AUCTION_ID ==( auctionid[0])).Select(c => c.TENOR_ID);

        return Json(Tenor, JsonRequestBehavior.AllowGet);
}

例外

C# jQuery ASP.NET-MVC 下拉菜单

评论

0赞 7/15/2016
搜索 MVC 级联下拉列表(有关示例,请参阅此 DotNetFiddle
0赞 Tetsuya Yamamoto 7/15/2016
使用 Javascript 进行级联下拉列表,捕获 的值并进行 ajax 调用以加载第二个下拉列表的值。PMID1
0赞 Mussaib Siddiqui 7/15/2016
我进行了ajax调用,并且我的函数正在更改下拉列表事件'public ActionResult FillTenor(DateTime?IssueDate) { var auctionid = db.PRIMKT_MAST。其中 (c => c.ISSUE_DATE == IssueDate)。选择 (c=>c.AUCTION_ID)。ToList();var Tenor = db。AUCDATA_TENORS。其中(c => c.AUCTION_ID ==( auctionid[0]))。选择(c => c.TENOR_ID);返回 Json(Tenor, JsonRequestBehavior.AllowGet);}' 但它给了我例外@TetsuyaYamamoto
0赞 Tetsuya Yamamoto 7/15/2016
请在您现有的帖子中显示您完整的 ajax 调用、您的控制器代码和抛出的异常,我将尝试调查并尽可能提供解决方案详细信息。
0赞 Mussaib Siddiqui 7/15/2016
我已经更新了我的问题,请检查@TetsuyaYamamoto

答:

0赞 Tetsuya Yamamoto 7/15/2016 #1

乍一看,with 意味着您在 lambda 表达式中具有某些数组值赋值,可能会返回 null 或空值,因此无法将其转换为正确的 SQL 语句来填充级联下拉列表。LINQ to Entities does not recognize the methodget_Item(Int32)

我怀疑这个表达式产生了该异常:

var Tenor = db.AUCDATA_TENORS.Where(c => c.AUCTION_ID ==( auctionid[0])).Select(c => c.TENOR_ID);

建议的 lambda 表达式:

// common practice handling array value(s) into lambda:
// use a variable outside lambda to hold array value(s),
// then pass that variable inside the lambda
var auctionId = auctionid[0]; // this may improved to check against null or empty value
var Tenor = db.AUCDATA_TENORS.Where(c => c.AUCTION_ID == auctionId).Select(c => c.TENOR_ID);

注意:此行为也适用于包含属性的类中的数组。

欢迎任何改进和建议。

参考:LINQ to Entities 无法识别方法...get_Item(Int32)

评论

0赞 Mussaib Siddiqui 7/15/2016
谢天谢地,你是救生员:D