确定Editorfor或TextBoxFor

时间:2013-01-07 14:14:42

标签: c# asp.net-mvc textbox editorfor

我是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 个答案:

答案 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类型。

希望这有帮助。