我最近才刚开始学习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();
}
答案 0 :(得分:0)
从外观上看,您有两个问题。正如@Doug F所说,您正在调用一个不带参数的JavaScript函数,但您正在传递一个参数,因此找不到该参数。
第二个是此行
var selected_val = $('#inputCustomerNumber').text();
我看不到代码中此ID存在的任何地方。是不是应该是
var selected_val = $('#inputRGANumber').text();
相反?