0
votes

Here is what I am trying to do. I don't understand Why it is expecting an enumerable list.

AddressController.cs

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

}

ShowAddressViewModel.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>

edit

Call from Another partial view's java script

$.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 :(');
            }
        });
    }

Server Error in '/PSPOC' Application. --------------------------------------------------------------------------------

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 
2
Whereabouts are you getting this error - in the foreach in the Razor file? And why are you using AddrModel.Addresses[i].City rather than just item.City etc.Rup
And should your @(i++) have curly braces not round brackets? (guessing from the other code, I've never used Razor)Rup
@Rup Look at <tr id="@(i)">millimoose
I am calling this method from another partial view's javascript which is returning a Internal server error 500. I am new to MVC or anything related to C# for that matter. I got the error message from fiddler. All the razor script I have to make changes. But, even if I take out all the razor script, I still got that errorSat
Set your action to be of type PartialViewResult instead of ActionResult. Also, please show the call to the action, are you using RenderAction?...Lars Anundskås

2 Answers

0
votes

Assuming that you are trying to render your view with

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

And your model are sent to the view without going through the controller, so you are actually sending the view a collection of addresses instead of the wrapped viewmodel.

Try this approach instead:

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

EDIT

Actually:

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

i think is

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

And in the top of your _ShowAddr.cshtml

@model IEnumerable<PeopleSoftControlsPOC.Models.ShowAddressViewModel>

im doing something like you