Я только недавно начал изучать MVC и столкнулся с проблемой, которая может выявить фундаментальное недоразумение, которое я имею с MVC.В настоящее время у меня есть модель и ViewModel, которая является не чем иным, как списком моделей.ViewModel передается в представление, и модель является ссылкой на функцию стрелки вместо свойства фактической модели, являющейся ссылкой для функции стрелки.Я полагаю, что это может помешать мне получить фактические свойства моей модели от появления в событии jQuery OnChange для DropDownList.
То, что я первоначально достиг, - это возможность ввести набор значений для первоначального заполнения моеговыпадающие списки (который работает нормально).Теперь я хочу дать пользователю возможность выбрать элемент в раскрывающемся списке, и он должен выбрать уникальную строку в базе данных, связанную с выбранным значением в раскрывающемся списке, и заполнить другие текстовые поля, которые соответствуют выбранному значению.
До сих пор я пробовал множество различных свойств в вызове AJAX, чтобы извлечь из выбранного значения DropDownList.Нужно ли вообще удалять мой 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
}
Модель представления:
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();
}