2

多くの大きなビューを含むプロジェクトがあります (編集可能なフォーム; ある種の調査を考えてください)。パイロット フェーズの顧客は、すべてのフォームと要素を表示できる役割を望んでいますが、編集/保存はできないはずです。

簡単な修正方法の 1 つは、ロールを確認して、送信ボタンのオン/オフを切り替えることです。しかし、すべての要素に HTML の @readonly を入力せずに、ビューを編集可能から読み取り専用に変換するかなり簡単な方法があることを願っています (TextBoxFor、EditorFor、Checkbox、textareas に至るまで、何千もの要素があります)。

このプロジェクトでは、管理者、センター、患者の 3 つの役割を利用します。問題のコントローラーには [Authorize(Roles="Admin,Centre")] がありますが、後者には完全な読み取り専用アクセスが必要なので、これはおそらく今すぐ行く必要があります (または患者を追加する必要があります)。

すべてのモデル属性やすべてのカミソリエディターを編集せずに、これを機能させる方法についてのアイデアはありますか?

プロジェクトは、mvc3、razor、jquery、および jQuery-ui を使用します

4

1 に答える 1

0

この古い質問を閉じるために、私が解決した方法を紹介します。

「TextBoxFor」、「CheckBoxFor」などをオーバーロードし、メソッドの最後に readOnly/disabled のブール値パラメーターを追加する必要がありました。以下に例を示します。

    //Overload TextBoxFor with a "disabled" parameter. For use with readonly-roles
    public static IHtmlString TextBoxForRo<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes, bool disabled)
    {
        var attributes = new RouteValueDictionary();

        if (htmlAttributes != null)
        {
            foreach (System.ComponentModel.PropertyDescriptor property in System.ComponentModel.TypeDescriptor.GetProperties(htmlAttributes))
            {
                attributes.Add(property.Name.Replace('_', '-'), property.GetValue(htmlAttributes));
            }
        }

        if (disabled)
        {
            attributes["disabled"] = "disabled";
        }
        return htmlHelper.TextBoxFor(expression, attributes);
    }  

すべてのタイプまたはフォーム入力に対してこれを行う必要があり、明らかにビュー内の多くの呼び出しを置き換える必要がありました。それは機能しますが、それは私が考えることができる最良の解決策でした.

于 2015-03-05T06:59:10.343 に答える