部分视图是否可以根据呈现的视图动态更改?

时间:2014-11-13 20:08:55

标签: c# asp.net-mvc razor asp.net-mvc-5

我有一个PartialView,它填充一个变量项目列表,每个项目包含特定于其中一个项目的输入。此列表显示在每个“创建”,“编辑”和“详细信息”视图中。这个问题是,虽然Create和Edit Views需要能够修改所有输入,但我希望Details页面上的输入是只读的。我知道如何通过以下方式做到这一点:

@Html.EditorFor(x => x.Foo[i].Bar, new { htmlAttributes = new { @readonly="readonly" } })

是否可以根据当前呈现的View动态设置PartialView中的readonly属性,以便在呈现Details View时,所有输入都设置为readonly?

我意识到一个解决方案非常简单:在详细信息视图中复制PartialView中的代码,并将输入设置为只读。但是,我宁愿将所有代码保存在同一个地方,如果可能的话,也要避免这种重复=)

2 个答案:

答案 0 :(得分:0)

不,但你可以创建一个辅助方法:

public class Extensions
{
    public static string EditorWithReadOnlyFor(
        this HtmlHelper helper,
        Expression<Func<TModel,TProperty>> expression,
        bool readonly)
    {
        // Use bool to manipulate attributes then
        return helper.EditorFor(expression, /* add attributes */ )
    }
}

您应该能够像这样使用它:

@Html.EditorWithReadOnlyFor(x => x.Foo[i].Bar, true)

答案 1 :(得分:0)

基于我对你的问题的理解。你似乎需要动态设置readonly属性。

您可以在ViewModal中添加IsReadOnly并查看:

@Html.EditorFor(x => x.Foo[i].Bar, new { htmlAttributes = new { @readonly=@Model.IsReadOnly }