Определить Editorfor или TextBoxFor
Я новичок в MVC/C# и имею следующий код в файле CSHTML. В основном он определяет выполняемую операцию (вставка или обновление) и на основании результата решает, должно ли поле отображаться только для чтения или для редактирования.
@if (Model.DatabaseOperationFlag == DatabaseOperation.Update)
{
@Html.TextBoxFor(model => model.BmUnit.BMU_ID, new {@readonly = "readonly"})
}
else
{
@Html.EditorFor(model => model.BmUnit.BMU_ID)
}
Код понадобится во всем приложении, но я не уверен, где и как я могу написать какой-то элемент управления, чтобы я мог использовать подобный код:
@Html.ReadOnlyOnUpdate(model => model.BmUnit.BMU_ID, model.DatabaseOperation);
ReadOnlyOnUpdate будет затем делать логику в первом разделе кода.
заранее спасибо
Крис
1 ответ
Вы можете создать помощника, который сделает это за вас. Создайте класс с методом, который выходит за пределы HtmlHelper:
public static class Helpers
{
public static IHtmlString ReadOnlyOnUpdate(this HtmlHelper helper, int BMU_ID, DatabaseOperation operation)
{
var attrs = new Dictionary<string, object>();
if (operation == DatabaseOperation.Update)
{
attrs.Add("readonly", "readonly");
}
return helper.TextBox("BMU_ID", BMU_ID, attrs);
}
}
Используя универсальные шаблоны, вы, вероятно, могли бы установить метод расширения, который вы могли бы использовать, если бы он был вне модели и конкретно с BMU_ID. Создайте что-то похожее на EditorFor:
public static IHtmlSTring ReadOnlyOnUpdateFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<TModel, TProperty>> expression, DatabaseOperation operation)
Вам просто нужно заменить TModel типом вашей модели, а TProperty типом BMU_ID, который я считаю.
Надеюсь, это поможет.