如何将DropDownList值传递给jQuery OnChange事件?当前为空

时间:2019-01-29 18:46:50

标签: c# jquery model-view-controller

我最近才刚开始学习MVC,但遇到了一个问题,该问题可能暴露出我对MVC的基本误解。我目前有一个模型,还有一个ViewModel,无非就是模型列表。 viewModel传递到视图中,并且模型是箭头函数的引用,而不是实际模型的属性是箭头函数的引用。我认为这可能会阻碍我获取我实际模型的属性,使其无法进入DropDownList的jQuery OnChange事件。

我最初完成的工作是能够引入一组值来初始填充我的下拉列表(效果很好)。现在,我要为用户提供选择下拉列表中项目的选项,并让它在数据库中拉出与下拉列表中所选值相关联的唯一行,并填充与所选值匹配的其他文本框。

到目前为止,我已经尝试了AJAX调用中的许多不同属性以从DropDownList selectedValue中提取。我是否需要全部废弃ViewModel?如果是这样,我最初将如何填充下拉菜单? 型号:

public class ReturnGoodsAuthorizationModel
{
    public string RGANumber { get; set; }
    public string CustomerNumber { get; set; }
    //TODO: Add additional columns here to return the rest of the ReturnGoodsAuthorization attributes
}

ViewModel:

    public class ReturnGoodsAuthorizationViewModel
    {
        public List<ReturnGoodsAuthorizationModel> ReturnGoodsAuthorizationModel { get; set; }
    }

查看:

                    <script type="text/javascript">
                        function TestMethod() {
                            var selected_val = $('#inputCustomerNumber').text();
                            $.ajax({
                                type: "GET",
                                url: "/Home/SelectSBU",
                                data: "id=" + selected_val,
                                success: function (data) {
                                    if (data.length > 0) {
                                        $('#inputInvoiceNumber').val(data[0].CustomerNumber);
                                    }
                                    else {
                                        $('#inputInvoiceNumber').val('');
                                    }
                                }
                            });
                        }
                    </script>
<div class="col-sm-4">
                            <label for="inputRGANumber">RGA Number</label>
                            @Html.DropDownListFor(model => model.ReturnGoodsAuthorizationModel, new SelectList(Model.ReturnGoodsAuthorizationModel,"RGANumber","RGANumber"), new { @class = "form-control", @id = "inputRGANumber", @onchange = "TestMethod(this)" })

                            @*<label for="inputRGANumber">RGA Number</label>
                            <select id="inputRGANumber" class="form-control">
                                @Html.DropDownListFor(model => model.RGANumber, new SelectListItem(model.RGANumber, "Value", "Text"))
                        </div>

控制器:

public class HomeController : Controller
{
private IReturnGoodsAuthorization returnGoodsAuthorization = new ReturnGoodsAuthorization();

public ActionResult ReturnGoodsAuthorization()
{
    ViewBag.Message = "Return Goods Authorization";
    ViewBag.RGANumbers = new SelectList(returnGoodsAuthorization.GetAll());

    var returnGoodsAuthorizationViewModel = new ReturnGoodsAuthorizationViewModel
    {
        ReturnGoodsAuthorizationModel = returnGoodsAuthorization.GetAll()
    };

    return View(returnGoodsAuthorizationViewModel);
}
public JsonResult SelectSBU(string customerNumber)
{
    return Json(returnGoodsAuthorization.GetAll().Where(x => x.CustomerNumber == customerNumber), JsonRequestBehavior.AllowGet);
}

} 储存库:

public List<ReturnGoodsAuthorizationModel> GetAll()
{
    return this._db.Query<ReturnGoodsAuthorizationModel>(sql:"dbo.usp_ReturnGoodsAuthorization_Get",commandType:CommandType.StoredProcedure).ToList();
}

1 个答案:

答案 0 :(得分:0)

从外观上看,您有两个问题。正如@Doug F所说,您正在调用一个不带参数的JavaScript函数,但您正在传递一个参数,因此找不到该参数。

第二个是此行

var selected_val = $('#inputCustomerNumber').text();

我看不到代码中此ID存在的任何地方。是不是应该是

var selected_val = $('#inputRGANumber').text();

相反?