Нулевое значение при попытке отправить значение DropDownList функции ajax в модальном режиме с использованием MVC - Entity - PullRequest
0 голосов
/ 27 апреля 2020

Я создаю новый MVC веб-сайт с использованием EntityFramework и на своем _Layout.cs html я вызываю PartialView, который является модальным для вставки записи в конкретную c таблицу.

Частичное представление содержит следующий DDL:

<div class="form-group">
   @Html.LabelFor(model => model.Currency, htmlAttributes: new { @class = "control-label col-md-2" })
       <div class="col-md-10">
           <select class="form-control" id="CurrencyId" name="CurrencyId">
                <option value="">Select currency...</option>
           </select>
        </div>
</div>

Используется автоматически сгенерированная модель:

using System;
using System.Collections.Generic;

public partial class Property
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Property()
    {
        this.Attachments = new HashSet<Attachment>();
        this.BankAccountCorrienteProperties = new HashSet<BankAccountCorrienteProperty>();
        this.Contracts = new HashSet<Contract>();
        this.Photos = new HashSet<Photo>();
        this.Renters = new HashSet<Renter>();
    }

    public int IdProperty { get; set; }
    public Nullable<int> IdOwner { get; set; }
    public Nullable<int> PropertyType { get; set; }
    public string StreetName { get; set; }
    public Nullable<decimal> SquareMetersSize { get; set; }
    public Nullable<bool> Garage { get; set; }
    public Nullable<int> PropertyStatus { get; set; }
    public string ConstructionDate { get; set; }
    public Nullable<short> RentOrSell { get; set; }
    public Nullable<int> Currency { get; set; }
    public Nullable<decimal> Price { get; set; }
    public string Notes { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Attachment> Attachments { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<BankAccountCorrienteProperty> BankAccountCorrienteProperties { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Contract> Contracts { get; set; }
    public virtual Currency Currency1 { get; set; }
    public virtual Owner Owner { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Photo> Photos { get; set; }
    public virtual PropertyType PropertyType1 { get; set; }
    public virtual PropertyStatu PropertyStatu { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Renter> Renters { get; set; }
}

И для загрузки данных в раскрывающемся списке мне пришлось использовать Ajax следующим образом:

getDdlInfo("../Currency/ListCurrencies", function (result) {
$.each(result.data, function (key, item) {
    $("#CurrencyId").append($('<option></option>').val(item.CurrencyId).text(item.CurrencyName));
});

function getDdlInfo(path, callBackFunct) {
$.ajax({
    type: "GET",
    url: path,
    success: function (result) {
        return callBackFunct(result);
    },
    error: function (data) {
    }
});

Для последующей отправки значения в контроллер, где находится HTTP-сообщение для отправки данных в базу данных:

function createProperty() {
$.ajax({
    url: '../Property/CreateProperty',
    type: 'POST',
    cache: false,
    async: true,
    data: $('form').serialize(),
    success: function (result) {
        //TODO: Modal de propiedad cargada
    }
});

Моя проблема здесь заключается в следующем: 1 ) Всякий раз, когда createProperty() входит в контроллер, все данные там, кроме выпадающего списка. Он попадает в контроллер всегда ноль, независимо от того, выберу я значение или нет и ... 2) Это правильный подход для этого? Я что-то пропустил? Я пытался использовать Razor DropDownList, но не смог найти способ сделать это правильно.

Спасибо.

1 Ответ

0 голосов
/ 29 апреля 2020

В вашей модели свойство называется Currency, поэтому имя вашего входа должно совпадать с этим для успешного связывания модели. Изменение имени на входе на Currency должно разрешить его.

<select class="form-control" id="CurrencyId" name="Currency">

...