Mvc在运行时更改视图模型

时间:2016-01-03 13:59:07

标签: asp.net-mvc

我需要根据某些条件将不同的模型绑定到同一视图。 然后我可以在运行时更改视图模型。

1 个答案:

答案 0 :(得分:1)

我不建议这样做,因为视图与模型相关联。我希望你有两个非常相似的模型,但你仍然需要在一个模型中的属性而不是另一个模型中放置各种条件以及修改此视图的问题可能会导致问题不止一个地区。

如果两个模型都继承自同一个基础,则可以执行此操作:

public class ModelBase
{
    public string SharedProperty { get; set; }
}
public class ModelA : ModelBase
{
    public string AProp { get; set; }
}
public class ModelB : ModelBase
{
    public string BProp { get; set; }
}

然后在您的视图中使用模型的基础并在需要的地方进行投射:

@model ModelBase

@if (Model.GetType() == typeof(ModelA))
{
    @Html.EditorFor(m => ((ModelA)m).AProp)
}

您还需要接受ModelBase并在控制器中强制转换:

public ActionResult SomeAction(ModelBase model)
{
    bool modA = model.GetType() == typeof(ModelA);
    string a = modA ? ((ModelA)model).PropA : "";
}

但同样,这会导致代码混乱!