【问题标题】:Trouble with lookup in Edit view using MVC 4 EF C#使用 MVC 4 EF C# 在编辑视图中查找问题
【发布时间】:2014-04-06 15:40:30
【问题描述】:

我有一个编辑视图,它是一个表单。我希望用户能够查找/搜索 UPC(搜索数据库表)并查看该表单上的匹配记录,以便他们可以选择一个结果,然后该结果将填充编辑视图表单上的一个字段,并使用表单提交到 POST。

我正在进行的工作是查找/搜索。我的编辑视图表单上有搜索框,搜索结果有一个空 div:

                            <div class="form-group" id="search-pac">
                                @Html.Action("PacSearch", "ItemRequest");
                            </div>
                            <div class="form-group" id="search-pac-results">
                            </div>

提交时,我成功看到 UPC 击中了控制器:

[HttpPost]
public ActionResult PacSearch(string pacupc)
{
    if (pacupc != null)
    {
        try
        {
            List<PriceAssociationLookup> matchingPacs = new List<PriceAssociationLookup>();
            matchingPacs = matchingPacs.GetPacs(pacupc);

            return PartialView("_PacSearchResultsPartial", matchingPacs);
        }
        catch (Exception e)
        {
            Alert.SetAlert(this.HttpContext, String.Format("There was an error in the Price Association Code lookup for UPC {0}.  Error: {1}", pacupc, e), "alert-warning");
        }
    }
    return PartialView("_PacSearchResultsPartial","UPC not found");
}

但是我无法在控制器中执行哪些操作才能从数据库中获取匹配记录列表。使用我当前在控制器中的代码,我收到错误:“错误 1 ​​'System.Collections.Generic.List' 不包含 'GetPacs' 的定义,并且没有扩展方法 'GetPacs' 接受类型的第一个参数'可以找到 System.Collections.Generic.List'(您是否缺少 using 指令或程序集引用?)"

GetPacs 被定义为接受一个字符串。如何将 pacups 字符串传递给 GetPacs?

这里是相关的类:

namespace Portal.Repository.SqlDatabase {
    public partial class PriceAssociationLookup : IPriceAssociationLookupRepository
    {
        #region IPriceAssociationLookupRepository Members
        IEnumerable<IPriceAssociationLookupRepository> IPriceAssociationLookupRepository.GetPacs(string upc)
        {
            using (PortalDataEntities entities = new PortalDataEntities())
            {
                var priceAssociationLookups = (from priceassociationlookup in entities.PriceAssociationLookups
                                               where priceassociationlookup.Upc == this.Upc
                                               select priceassociationlookup).ToList();

                return priceAssociationLookups;
            }

        }

        #endregion IPriceAssociationLookupRepository Members

【问题讨论】:

  • 我更近了。我将控制器代码更改为: try { PriceAssociationLookup pacRep = new PriceAssociationLookup(); List matchingPacs = pacRep.GetPacs(pacupc); return PartialView("_PacSearchResultsPartial", matchingPacs); }
  • 我现在收到错误消息“传递到字典中的模型项的类型为 'System.Collections.Generic.List`1[Portal.BusinessModel.Entities.PriceAssociationLookup]',但是这本字典需要“Portal.BusinessModel.Entities.PriceAssociationLookup”类型的模型项”

标签: c# asp.net-mvc entity-framework asp.net-mvc-4


【解决方案1】:

我的第一个建议是尝试删除 .ToList,因为您只返回一个 IEnumerable:

    #region IPriceAssociationLookupRepository Members
    IEnumerable<IPriceAssociationLookupRepository> IPriceAssociationLookupRepository.GetPacs(string upc)
    {
        using (PortalDataEntities entities = new PortalDataEntities())
        {
            var priceAssociationLookups = (from priceassociationlookup in entities.PriceAssociationLookups
                                           where priceassociationlookup.Upc == this.Upc
                                           select priceassociationlookup);

            return priceAssociationLookups;
        }

    }

您可能会收到一个新错误,其中您的上下文已过期 - 但请告诉我。

【讨论】:

    【解决方案2】:

    答案如下: 控制器:

    [HttpPost]
    public ActionResult PacSearch(string pacupc)
    {
        if (pacupc != null)
        {
            try
            {
                PriceAssociationLookup pacRep = new PriceAssociationLookup();
                //List<PriceAssociationLookup> matchingPacs = pacRep.GetPacs(pacupc);
    
                return PartialView("_PacSearchResultsPartial", pacRep.GetPacs(pacupc));
            }
            catch (Exception e)
            {
                Alert.SetAlert(this.HttpContext, String.Format("There was an error in the Price Association Code lookup for UPC {0}.  Error: {1}", pacupc, e), "alert-warning");
            }
        }
        return PartialView("_PacSearchResultsPartial","UPC not found");
    }
    

    返回的部分视图需要输入为:

    @model List<Portal.BusinessModel.Entities.PriceAssociationLookup>
    

    我认为当没有找到 UPC 匹配时,控制器的返回可能仍然存在问题(return PartialView("_PacSearchResultsPartial","UPC not found"); ),但我最初提出的主要问题是通过更改控制器和局部视图来解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 2016-01-17
      相关资源
      最近更新 更多