加载编辑页面时不设置下拉框,但设置视图模型属性的其余部分

本文关键字:设置 属性 模型 视图 余部 编辑页面 加载 | 更新日期: 2023-09-27 17:49:43

我在我的数据库中有这两个表,名为vendor和VendorPriceBreaks:

Vendors
-----------------
VendorID (PK)
Name
VendorPriceBreaks
-----------------
VendorPriceBreakID (PK)
VendorID (FK)
Price
PaymentTypeID (FK)

我有一个单一的视图页面添加Vendor和VendorPriceBreaks在同一时间。

这是我的VendorsViewModel:

public class VendorsViewModel
{
    [HiddenInput(DisplayValue = false)]
    public int VendorId { get; set; }
    public string Name { get; set; }
    public IEnumerable<VendorPriceBreaksViewModel> VendorPriceBreaks { get; set; }
}

我的VendorPriceBreaksViewModel:

public class VendorPriceBreaksViewModel
{
    [HiddenInput(DisplayValue = false)]
    public int VendorPriceBreakId { get; set; }
    public double? Price { get; set; }
    public int? PaymentTypeId { get; set; }
    public IEnumerable<PaymentType> PaymentTypes { get; set; }
}

供应商的视图页:

<%: Html.TextBoxFor(m => m.Name)%>
<table id="dynamic-rows" cellpadding="0" cellspacing="0">
<% foreach (var item in Model.VendorPriceBreaks)
    Html.RenderPartial("VendorPriceBreakRow", item);
%>
</table>

这里是我的控件:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CopyCraft.WebUI.Areas.Admin.Models.VendorPriceBreaksViewModel>" %>
<tr class="dynamic-row">
    <% using(Html.BeginCollectionItem("vendorPriceBreaks")) { %>
        <td>$<%= Html.TextBoxFor(m => m.Price) %></td>
        <td><%= Html.DropDownListFor(m => m.PaymentTypeId, new SelectList(Model.PaymentTypes, "PaymentTypeID", "Name"), "- Select a Payment Type -")%></td>
    <% } %>
</tr>

当我编辑一个供应商和价格分隔被加载时,价格被设置,但在下拉菜单中没有PaymentType值。

下面是编辑Vendor时的函数:

public ActionResult Edit(int id)
{
    var vendor = _adminRepository.GetVendor(id);
    List<VendorPriceBreaksViewModel> priceBreakssViewModels = new List<VendorPriceBreaksViewModel>();
    foreach (VendorPriceBreak priceBreak in vendor.VendorPriceBreaks)
    {
        priceBreaksViewModels.Add(new VendorPriceBreaksViewModel
            {
                Price = sheetPrice.Price,
                PaperUnitTypeId = sheetPrice.PaperUnitTypeID,
                PaperUnitTypes = _adminRepository.GetAllPaperUnitTypes()
            }
        );
    }
    var viewModel = new VendorsViewModel
    {
        VendorId = vendor.VendorID,
        Name = vendor.Name,
        VendorPriceBreakSheetPrices = sheetPricesViewModels
    };
    return View(viewModel);
}

所以下拉菜单的数据正在被加载,但是所选的值没有被设置。但是Price值是在文本框中设置的。

我不知道怎么回事

加载编辑页面时不设置下拉框,但设置视图模型属性的其余部分

尝试使用以下代码:

<%= Html.DropDownListFor(m => m.PaymentTypeId, 
    new SelectList(Model.PaymentTypes, "PaymentTypeID", "Name", Model.PaymentTypeId), 
    "- Select a Payment Type -")%>

更详细的分析在这里- DropDownListFor没有绑定编辑视图与重复的项目(列表)。