繁体   English   中英

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

[英]How do I pass a DropDownList Value to a jQuery OnChange event? It's currently coming in null

我最近才刚开始学习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();
}

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

第二是这条线在这里

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

我在代码中找不到该ID的任何地方。 是不是要

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

代替?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM