尝试使用 MVC - 实体将 DropDownList 值发送到模态中的 ajax 函数时为空值

Null value while trying to send a DropDownList value to an ajax function in a Modal using MVC - Entity

我正在使用 EntityFramework 创建一个新的 MVC 网站,并且在我的 _Layout.cshtml 上我正在调用一个 PartialView,这是一个在特定 [=35= 上插入记录的模式].

部分视图包含以下 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 Post 用于将数据发送到数据库:

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() 进入控制器时,所有数据都在那里,除了下拉列表。它到达控制器总是空的,不管我是否 select 一个值和... 2)这是正确的方法吗?我错过了什么吗?我尝试使用 Razor DropDownList,但找不到正确的方法。

谢谢。

在您的模型中,属性 称为 Currency,因此您输入的名称需要与该名称匹配才能成功绑定模型。将输入上的名称更改为 Currency 应该可以解决它。

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