嵌套的局部视图传递子对象问题

5

我正试图将一个局部视图中的子对象传递到另一个视图,但总是出现错误。有谁可以帮我解决这个问题?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)
4个回答

4

我遇到了同样的问题。在我的情况下,每当子模型为空时,框架就会将主模型传递给部分视图。

作为一种解决方法,我在将其传递给部分视图之前检查子模型是否为空。如果它是空的,那么我要么根本不显示部分视图,要么创建一个子模型的实例。(再次强调,这只是一个解决方法,直到我找到这个问题的正确解决方案。如果有的话。)


1

改变这个。

@Html.RenderPartial("UserControl/Calendar", Model.DOB)

你的PetModel模型中有一个类型为Calender的DOB属性。

这是我的打字错误,我已经更正了,主要问题在于将子模型传递给嵌套的局部视图。 - user2376512

1
您可以尝试使用@Html.Partial("UserControl/Calendar", Model.DOB)代替RenderPartial。我知道在某些情况下,RenderPartial无法正确地传回值。

0

PetModel 不包含 "PetName"

PetDetailsContent 部分视图

@Html.TextBoxFor(x => x.PetName)

这是我的打字错误,我已经纠正了。主要问题在于将子模型传递给嵌套的部分视图。 - user2376512

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接