Reputation: 885
I am trying to pass sub object in a partial view to another, and I always get the error. Can anyone help me to solve this? T.T
"The model item passed into the dictionary is of type 'Application.Models.PetModel', but this dictionary requires a model item of type 'Application.Models.Calendar'"
Main model
public class PetModel
{
public string Name { get; set; }
public long SpeciesID { get; set; }
public long BreedID { get; set; }
public Calendar DOB { get; set; }
}
Sub Model
public class Calendar
{
public int Day { get; set; }
public int Month { get; set; }
public int Year { get; set; }
public DateTime DateObj
{
get
{
if (Day != 0 && Month != 0 && Year != 0)
{
return new DateTime(Year, Month, Day);
}
return DateTime.Now;
}
set
{
if (value != null)
{
Day = value.Day;
Month = value.Month;
Year = value.Year;
}
}
}
}
Main View
@model Application.Models.PetModel
@using (Html.BeginForm("CatchPetContent", "Quote",Model))
{
@Html.Partial("PetDetailsContent", Model)
<input type="submit" value="submit" />
}
PetDetailsContent Partial View
@model Application.Models.PetModel
@Html.TextBoxFor(x => x.Name)
@Html.DropDownListFor(x => x.SpeciesID, (IEnumerable<SelectListItem>)ViewData["TypeList"], "--Please Select--")
@Html.DropDownListFor(x => x.BreedID, (IEnumerable<SelectListItem>)ViewData["BreedList"], "--Please Select--")
@Html.RenderPartial("UserControl/Calendar", Model.DOB)
Calendar Partial view
@model Application.Models.Calendar
@Html.TextBoxFor(x => x.Day)
@Html.TextBoxFor(x => x.Month)
@Html.TextBoxFor(x => x.Year)
Upvotes: 5
Views: 2509
Reputation: 79
You could try using @Html.Partial("UserControl/Calendar", Model.DOB)
instead of RenderPartial. I know in some cases, the RenderPartial doesn't allow values to pass back properly.
Upvotes: 1
Reputation: 5041
I have got the same problem. In my case whenever the sub-model is null, framework is passing the main model to the partial view.
As a workaround I check if the sub-model is null before passing it to the partial view. If its null then I either dont show the partial view at all or create an instance of the sub-model. (Again, its a workaround until I find the proper solution for this issue. If there is one.)
Upvotes: 4
Reputation: 911
PetModel does not contain "PetName"
PetDetailsContent Partial View
@Html.TextBoxFor(x => x.PetName)
Upvotes: 0
Reputation: 1903
Change This,
@Html.RenderPartial("UserControl/Calendar", Model.DOB)
you have DOB property of type Calender in your PetModel model.
Upvotes: 1