У меня есть частичное представление, которое иногда требуется для сбора данных, а иногда просто для отображения сохраненных данных и не позволяет редактировать.
Я хотел бы использовать одно и то же частичное представление для обеих нужд, поскольку форматирование является сложным. Однако я не хочу просто применять тег «отключен» к конкретным элементам управления: я хочу (на стороне сервера) отображать данные только для чтения в виде текста, а не в качестве элементов управления, чтобы их нельзя было публиковать обратно .
(Для усложнения вещей есть одно поле для комментариев, которое можно редактировать, даже если все остальные поля доступны только для чтения, поэтому будет сообщение назад.)
Я думаю об общем решении этой проблемы. Самое простое, что можно сделать, это применить следующий шаблон кода ко всем полям:
@{ if(condition) {
@Html.TextBoxFor(model=>model.Field)
}
else
{
@Html.DisplayFor(model=>model.Field)
}
}
Но это не элегантно и может затруднить чтение кода. Кроме того, так как шаблон должен быть применен вручную, было бы легко делать ошибки.
Я занимался написанием некоторых методов расширения для дополнения TextBoxFor и др., Которые бы принимали дополнительный параметр, указывающий, вызывать ли TextBoxFor или DisplayFor.
Но то, что я хотел бы еще лучше, - это то, что я мог бы установить для содержащего элемента, который бы автоматически влиял на способ отображения дочерних элементов, а также на способ установки свойства Visible в элементе управления ASP.NET WebForms Panel.
Так что теперь я выхожу в область гипотетических. Чтобы достичь этого, мне понадобится элемент, содержащий серверную часть (возможно, следуя тому же шаблону, что и BeginForm), который знает о своей собственной области и может влиять на то, как вызывались содержащиеся в нем вызовы расширения рендеринга.
Такое вообще возможно?