Razor视图中的多个视图模型

本文关键字:视图 模型 Razor | 更新日期: 2023-09-27 18:15:11

用剃刀视图处理多个模型的最佳方式是什么?

我有两个模型,都很相似,但是一个模型需要Postcode字段,而另一个模型不需要

public class IrelandPostcodeLookupViewModel , IWithProgress
{
    readonly Progress _Progress = new Progress(Step.Delivery);
    public Progress Progress
    {
        get { return _Progress; }
    }
    [Required(ErrorMessage = "Please enter your house number or name")]
    [DisplayName("House number or name")]
    public string HouseNumber { get; set; }
    [StringLengthWithGenericMessage(50)]
    [DisplayName("Eircode")]
    public string Postcode { get; set; }
}
public class PostcodeLookupViewModel , IWithProgress
{
    readonly Progress _Progress = new Progress(Step.Delivery);
    public Progress Progress
    {
        get { return _Progress; }
    }
    [Required(ErrorMessage = "Please enter your house number or name")]
    [DisplayName("House number or name")]
    public string HouseNumber { get; set; }
    [StringLengthWithGenericMessage(50)]
    [Required(ErrorMessage = "Please enter your postcode")]
    [DisplayName("PostCode")]
    public string Postcode { get; set; }
}

在控制器中,我想根据传入的国家使用特定的视图模型。就像

public virtual ActionResult PostcodeLookup(string country)
{
    if (country == Country.UnitedKingdom)
         return View(new PostcodeLookupViewModel());
    else
         return View(new IrelandPostcodeLookupViewModel());
}

我用

在视图中处理这个
@model dynamic

问题是我的视图包含了部分视图

@Html.Partial("~/Views/Shared/_Progress.cshtml", Model.Progress)

和我遇到错误'HtmlHelper'没有适用的方法命名为'Partial',但似乎有一个扩展方法的名称。无法动态分派扩展方法'

谁能告诉我如何处理部分视图?

谢谢

Razor视图中的多个视图模型

因为Modeldynamic,所以Model.Progress也产生了dynamic
这对于dynamic对象上的所有属性和函数调用都是正确的,无论你做得有多深。

要解决这个问题,可以对Model.Progress对象进行类型转换:

@Html.Partial("~/Views/Shared/_Progress.cshtml", (Progress)Model.Progress)