8

ReadOnly 属性は MVC 4 にはないようです。 Editable(false) 属性は、私が望むようには機能しません。

動作する同様のものはありますか?

そうでない場合、次のように機能する独自の ReadOnly 属性を作成するにはどうすればよいですか。

public class aModel
{
   [ReadOnly(true)] or just [ReadOnly]
   string aProperty {get; set;}
}

だから私はこれを置くことができます:

@Html.TextBoxFor(x=> x.aProperty)

これの代わりに(これは機能します):

@Html.TextBoxFor(x=> x.aProperty , new { @readonly="readonly"})

またはこれ(これは機能しますが、値は送信されません):

@Html.TextBoxFor(x=> x.aProperty , new { disabled="disabled"})

http://view.jquerymobile.com/1.3.2/dist/demos/widgets/forms/form-disabled.html

このようなものでしょうか? https://stackoverflow.com/a/11702643/1339704

ノート:

[編集可能(false)] が機能しませんでした

4

2 に答える 2

9

ReadOnlyプロパティに属性が存在するかどうかをチェックする、次のようなカスタム ヘルパーを作成できます。

public static MvcHtmlString MyTextBoxFor<TModel, TValue>(
    this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression)
{
    var metaData = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
    // in .NET 4.5 you can use the new GetCustomAttribute<T>() method to check
    // for a single instance of the attribute, so this could be slightly
    // simplified to:
    // var attr = metaData.ContainerType.GetProperty(metaData.PropertyName)
    //                    .GetCustomAttribute<ReadOnly>();
    // if (attr != null)
    bool isReadOnly = metaData.ContainerType.GetProperty(metaData.PropertyName)
                              .GetCustomAttributes(typeof(ReadOnly), false)
                              .Any();

    if (isReadOnly)
        return helper.TextBoxFor(expression, new { @readonly = "readonly" });
    else
        return helper.TextBoxFor(expression);
}

属性は次のとおりです。

public class ReadOnly : Attribute
{

}

モデルの例:

public class TestModel
{
    [ReadOnly]
    public string PropX { get; set; }
    public string PropY { get; set; }
}

これが次の剃刀コードで機能することを確認しました。

@Html.MyTextBoxFor(m => m.PropX)
@Html.MyTextBoxFor(m => m.PropY)

次のようにレンダリングされます。

<input id="PropX" name="PropX" readonly="readonly" type="text" value="Propx" />
<input id="PropY" name="PropY" type="text" value="PropY" />

disabled代わりに必要な場合はreadonly、それに応じてヘルパーを簡単に変更できます。

于 2013-08-29T16:09:06.417 に答える
5

独自の Html ヘルパー メソッドを作成できます

ここを参照してください: 顧客 Html ヘルパーの作成

実際に -この回答をチェックしてください

 public static MvcHtmlString MyTextBoxFor<TModel, TProperty>(
         this HtmlHelper<TModel> helper, 
         Expression<Func<TModel, TProperty>> expression)
    {
        return helper.TextBoxFor(expression, new {  @readonly="readonly" }) 
    }
于 2013-08-29T15:50:14.600 に答える