不方便渲染局部视图MVC 3

时间:2012-05-16 05:10:33

标签: asp.net-mvc-3 viewmodel partial-views

我对viewmodel的工作有部分看法,但在主视图中渲染局部视图时我感到不便

我收到以下消息:

传递到字典中的模型项的类型为“RolMVC3.Models.USER”,但此字典需要“RolMVC3.Areas”类型的模型项。 Distributor.Models。 LocationViewModel'

View Model(LocationViewModel),ViewModel位于Area

namespace RolMVC3.Areas.Distributor.Models
{
    public class LocationViewModel
        {  
            [Required]
            public decimal IdDepartment { get; set; }

            [Required]
            public string NameCity { get; set; }

            [Required]
            public string NameNeighborhood { get; set; }
        }
    }
}

部分视图(_LocationEdit):

 @model RolMVC3.Areas.Distributor.Models.LocationViewModel 
                   .....
                   .....
        <div class="editor-label">
            @Html.LabelFor(model => model.IdDepartment)
        </div>
        <div class="editor-field">
            @Html.DropDownListFor(model => model.IdDepartment, new SelectList(ViewBag.Department as System.Collections.IEnumerable, "IdDepartment", "NameDepartment", ViewBag.selectedDepartment), "--- Select ---", new { id = "Department"})
            @Html.ValidationMessageFor(model => model.Idepartment)
        </div>
                 .....
                 ..... 

主视图(编辑):

@model RolMVC3.Models.USER

@{
    ViewBag.Title = "Edit User";
}

        ....
        ....

@{Html.RenderPartial("_LocationEdit");}

        ....
        ....

我如何解决这个问题?

祝福

2 个答案:

答案 0 :(得分:0)

当你调用你的RenderPartial时,你需要传递一个模型类型的LocationViewModel。现在看起来你没有在编辑视图中看到这个,所以你需要a)从你的控制器将它添加到viewbag并通过你的RenderPartial调用传递它或b)在你的编辑视图中更改模型类型(您可能需要一个包含用户和locationviewmodel信息的包装器

<强> [编辑] 源代码看起来如下所示:

// ViewModel
namespace RolMVC3.Areas.Distributor.Models

    {
        public class EditPageViewModel
        {  
            public LocationViewModel LocationViewModel {get;set;]
            public USER User { get; set; }
        }

    }


// Edit View
    @model RolMVC3.Areas.Distributor.Models.EditPageViewModel

    @{
        ViewBag.Title = "Edit User";
    }

            ....
            ....

    @Html.RenderPartial("_LocationEdit",Model.LocationViewModel);

            ....
            ....

答案 1 :(得分:0)

在主视图(编辑)中传递LocationViewModel,因为部分视图需要此模型而您未在@Html.RenderPartial中传递

@model RolMVC3.Models.USER

@{
    ViewBag.Title = "Edit User";
}

        ....
        ....

@{Html.RenderPartial("_LocationEdit",YourLocationViewMODEL);}

        ....
        ....