我有一个PartialView,它填充一个变量项目列表,每个项目包含特定于其中一个项目的输入。此列表显示在每个“创建”,“编辑”和“详细信息”视图中。这个问题是,虽然Create和Edit Views需要能够修改所有输入,但我希望Details页面上的输入是只读的。我知道如何通过以下方式做到这一点:
@Html.EditorFor(x => x.Foo[i].Bar, new { htmlAttributes = new { @readonly="readonly" } })
是否可以根据当前呈现的View动态设置PartialView中的readonly属性,以便在呈现Details View时,所有输入都设置为readonly?
我意识到一个解决方案非常简单:在详细信息视图中复制PartialView中的代码,并将输入设置为只读。但是,我宁愿将所有代码保存在同一个地方,如果可能的话,也要避免这种重复=)
答案 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 }