1

私は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は、最初のコードセクションのロジックを実行します。

前もって感謝します

クリス

4

1 に答える 1

1

You could create a helper that would do that for you. Create a class with a method that extends off of 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);
    }
}

Through the use of generics, you could probably setup an extension method that you could do if off the model and the BMU_ID specifically. Create something similar to EditorFor:

public static IHtmlSTring ReadOnlyOnUpdateFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<TModel, TProperty>> expression, DatabaseOperation operation)

You would just have to replace TModel with your model type and TProperty with the type of BMU_ID I believe.

Hopefully this helps.

于 2013-01-07T14:31:26.830 に答える