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

你可以创建一个助手来为你做这件事。使用从 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 类型。

希望这会有所帮助。

于 2013-01-07T14:31:26.830 回答