传递到字典中的模型项是类型,但此字典需要类型为“System.Collections.Generic.IEnumerab

本文关键字:字典 类型 System IEnumerab Generic Collections 模型 | 更新日期: 2023-09-27 18:34:31

这就是我要做的。我不明白为什么它期待一个可枚举的列表。

地址控制器.cs

public ActionResult ShowAddresses(List<Address> ReturnAddresses)
    {
        ShowAddressViewModel viewModel = new ShowAddressViewModel() { Addresses = ReturnAddresses, Message = "New" };
return PartialView("_ShowAddr", viewModel);

}

显示地址视图模型.cs

public class ShowAddressViewModel
{
    public List<Address> Addresses { get; set; }
    public string Message { get; set; }
}

_ShowAddr.cshtml

@model PeopleSoftControlsPOC.Models.ShowAddressViewModel
<script type="text/javascript">
</script>
<form>
<div class="addressBlock">
<table id="AddressTable">
    @{int i = 0;}
     @{PeopleSoftControlsPOC.Models.ShowAddressViewModel AddrModel = Model;}
    @foreach (var item  in AddrModel.Addresses)
    {
        <tr id = "@(i)">
            <td>@(AddrModel.Addresses[i].Address1)
            </td>
            <td>@(AddrModel.Addresses[i].Address2)
            </td>
            <td>@(AddrModel.Addresses[i].City)
            </td>
            <td>@(AddrModel.Addresses[i].State)
            </td>
            <td>@(AddrModel.Addresses[i].Zip)
            </td>
        </tr>
        @(i++)
    }
</table>
</div>
</form>

编辑

从另一个部分视图的 java 脚本调用

$.ajax(url, {
            data: { ReturnAddresses : InboundAddresses },
            type: 'POST',
            cache: false,
            crossDomain: true,
            success: function (data) {
                //Populate the form values
                // Start Dialog Code
                $myWindow = jQuery('#myDiv');
                //instantiate the dialog
                $myWindow.html(data);
                $myWindow.dialog({
                    title: 'Select an address',
                    modal: true,
                    width: 'auto'
                });
                $myWindow.show();
                $myWindow.dialog("open");
                // End Dialog Code
                $('#AddressTable').on('click', 'tr', function () {
                    alert('You clicked row ' + ($(this).index()));
                });
                addAddress(Addresses, Message)
            },
            error: function (jqXHR, textStatus, errorThrown) {
                $('#Message').val('Kaboom!!! (The call blew up...#thatsucks)');
                alert('The Dialog Box call failed...Sorry :(');
            }
        });
    }

"/PSPOC"应用程序中的服务器错误。 --------------------------------------------------------------------------------

The model item passed into the dictionary is of type 'PeopleSoftControlsPOC.Models.ShowAddressViewModel', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[PeopleSoftControlsPOC.Models.ShowAddressViewModel]'. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
Exception Details: System.InvalidOperationException: The model item passed into the dictionary is of type 'PeopleSoftControlsPOC.Models.ShowAddressViewModel', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[PeopleSoftControlsPOC.Models.ShowAddressViewModel]'.
Source Error: 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 

[InvalidOperationException: The model item passed into the dictionary is of type 'PeopleSoftControlsPOC.Models.ShowAddressViewModel', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[PeopleSoftControlsPOC.Models.ShowAddressViewModel]'.]
   System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value) +383
   System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary dictionary) +625
   System.Web.Mvc.WebViewPage`1.SetViewData(ViewDataDictionary viewData) +74
   System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +138
   System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +378
   System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +33
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +727120
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +265
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +727076
   System.Web.Mvc.Controller.ExecuteCore() +159
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +334
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +15
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +52
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288

--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.18044 

传递到字典中的模型项是类型,但此字典需要类型为“System.Collections.Generic.IEnumerab

假设您正在尝试使用

@Html.Partial("_ShowAddr", Model.Adr)

并且您的模型无需通过控制器即可发送到视图,因此您实际上是向视图发送地址集合,而不是包装的视图模型。

请尝试以下方法:

@{ Html.RenderAction("ShowAddresses", Model.Adr); }

编辑

实际上:

@{ Html.RenderAction("TestPart", new { ReturnAddresses = Model.Adr }); }

我认为是

return PartialView("_ShowAddr", viewModel.ToList());

在你的_ShowAddr.cshtml之巅

@model IEnumerable<PeopleSoftControlsPOC.Models.ShowAddressViewModel>

我正在做像你一样的事情