我是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将执行第一个代码部分中的逻辑。
提前致谢
克里斯
答案 0 :(得分: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类型。
希望这有帮助。