我试图将局部视图中的子对象传递给另一个,我总是得到错误。任何人都可以帮我解决这个问题吗? T.T
“传递到字典中的模型项的类型为'Application.Models.PetModel',但此字典需要类型为'Application.Models.Calendar'的模型项”
主要模式
public class PetModel
{
public string Name { get; set; }
public long SpeciesID { get; set; }
public long BreedID { get; set; }
public Calendar DOB { get; set; }
}
子模型
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;
}
}
}
}
主视图
@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)
日历部分视图
@model Application.Models.Calendar
@Html.TextBoxFor(x => x.Day)
@Html.TextBoxFor(x => x.Month)
@Html.TextBoxFor(x => x.Year)
答案 0 :(得分:4)
我遇到了同样的问题。在我的情况下,只要子模型为null,框架就会将主模型传递给局部视图。
作为一种解决方法,我在将子模型传递给局部视图之前检查子模型是否为空。如果它为null,那么我要么根本不显示局部视图,要么创建子模型的实例。 (再次,它是一个解决方法,直到我找到适合这个问题的解决方案。如果有的话。)
答案 1 :(得分:1)
更改此内容,
@Html.RenderPartial("UserControl/Calendar", Model.DOB)
您的宠物模型模型中具有日历类型的DOB属性。
答案 2 :(得分:1)
您可以尝试使用BiQuadFilter
代替RenderPartial。我知道在某些情况下,RenderPartial不允许值正确传回。
答案 3 :(得分:0)
PetModel不包含“PetName”
PetDetailsContent Partial View
@Html.TextBoxFor(x => x.PetName)