简体   繁体   中英

To pass one element of parent model to partial view

I have a main model and a partial view. The model for the partial view is a new model with no values. But now I want to pass one element of parent model to the partial view. How do I go about it?

The parent and the partial views have different properties, so I cant use the same model.

Models:

public class Parent
{
     .
     .
     public List<SelectListItem> TypeList { get; set; }
     .
     .
}

public class Partial1
{
    public List<SelectListItem> TypeList1 { get; set; }
    .
    .
}
public class Partial2
{
    public List<SelectListItem> TypeList2 { get; set; }
    .
    .
}

Parent View:

@model Models.Parent

@Html.Partial("_Partial1", new Partial1())
@Html.Partial("_Partial2", new Partial2())

I realize I can pass it to the partial view using a ViewDataDictionary and use it, but I was wondering if I could assign it to my partial view model directly. Can I do something like this?

@Html.Partial("_Partial1", new Partial1(new{TypeList1 =Model.TypeList}))

The above code gives a compile time error saying Partial1 does not contain a constructor that takes 1 argument.

EDIT 1:

According to Chris Pratt's answer I modified my code to

@Html.Partial("_Partial1", new Partial1{TypeList1 =Model.TypeList})

This solved the compilation error.But this is now causing a run time error in the partial View 1.

Partial1 View:

@model Models.Partial1
@Html.DropDownListFor(model => model.Type, Model.TypeList1, new { @class = "form-control" })

throws an error "There is no ViewData item of type 'IEnumerable' that has the key 'Type'."

Oh sorry. That code actually looked right on first glance, but now I see the issue. You're trying to pass the info as an anonymous object to the constructor, which is parameterless. Instead, you should be using the object initialization syntax:

new Partial1 { TypeList1 = Model.TypeList }

try using

@{
    Html.RenderPartial("Partial1", new { param1 = model.property });
}

The MSDN Link .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM