0

入力ボックスのラベルを表示したいのですが、情報を含む3つの異なるクラスがあります

Class1のように[設定]はこんな感じ

public class Settings
{
    public static decimal Setting1 { get; set; }
    public static decimal Setting2 { get; set; }
}

ログイン時に上記のクラスにデータを入力しているため、セッションに保持しました

私のClass2 [AppConst]はこんな感じです

public static class AppConst
{
    public const string _unitPersentage = "%";
    public const string _unitPerMT = "Per MT";
}

そして私のモーダルはこのようなものです

public class Sale
{
    [Display(Name = "Discount")]
    public double DiscountAmount { get; set; }
    [Display(Name = "Road Tax")]
    public double RoadTaxAmount { get; set; }
}

モデル「Sale」のビューで、プロパティ「DiscountAmount」のラベルを次のように表示したい

割引 5% (DiscountAmount のラベル + Settings.Setting1 の値 + AppConst._unitPersentage の値)

ここで、「DiscountAmount」のラベルを取得できます

 @Html.TextBoxFor(o => o.DiscountAmount)

しかし、他の2つのメンバー「Settings.Setting1」および「AppConst._unitPersentage」の値を表示するにはどうすればよいですか

4

2 に答える 2

0

試す選択肢はほとんどありません。データが表示目的のみの場合は、ViewData、ViewBag、または TempData を使用して、目的に合った設定と AppConst の値を渡すことができます。ここを参照してください。

この場合、これらが静的オブジェクトであれば、ビュー内で次のように参照できます: <Namespace>.Settings.Setting1または<Namespace>.AppConst._unitPerMT.

これを出発点として、開発の適切なベスト プラクティスに従ってください。publicアンダースコアを使用してメンバーを宣言しないでください。アンダースコアは通常、privateメンバーの前に付けられます。

于 2013-04-15T11:30:41.057 に答える
0

モデルをフラット化してから、エディター テンプレートを使用してその複雑なラベルを表示できます。

フラット化モデル

public class CustomModel
{
    [Display(Name = "Discount")]
    public double DiscountAmount { get; set; }
    [Display(Name = "Road Tax")]
    public double RoadTaxAmount { get; set; }   
    public decimal Setting1 { get; set; }
    public string UnitPercent {get;set;}
}

テンプレート

テンプレートは、EditorTemplatesフォルダーの下のSharedフォルダー内に配置する必要があります。

@model CustomModel

@{
    var inputProp = ViewData.ModelMetadata.Properties
        .First(o => o.PropertyName == "DiscountAmount");
}
<label for="@inputProp.PropertyName" id="@(inputProp.PropertyName+"Label")">
    Discount 5% (@inputProp.ShortDisplayName @Model.Setting1@Model.UnitPercent)
    <input id="@inputProp.PropertyName" type="text"
        name="@inputProp.PropertyName" />    
</label>

コントローラーコード

モデルを作成してビューに渡す方法は次のとおりです。

return View(new CustomModel
{
    // get it from your datastore or where ever the source may be
    Setting1 = getFromDbOrSomewhere(),
    UnitPercent = AppConst._unitPersentage,                
});

あなたの見解

次に、このようにビューでそれを消費します

@model CustomModel

@Html.EditorFor(m => Model)

このアプローチの優れた点は、いつでもテンプレートを破棄して、ビューでインライン html を実行できることです。また、モデルの「入力 + ラベル」を持つロジックは 1 か所に分かれています。

于 2013-04-15T12:38:49.173 に答える