1

私はEditorFor()自分のビューにフィールドを持っています[cost]:

<div class="form-group">
        @*@Html.LabelFor(model => model.cost, htmlAttributes: new { @class = "control-label col-md-2" })*@
        <span class="control-label col-md-2">Cost:</span>
        <div class="col-md-10">
            @Html.EditorFor(model => model.cost, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.cost, "", new { @class = "text-danger" })
        </div>
    </div>

私がしたいのは、この値が表示されている$とき (個々のレコード、グリッド内など) にこの値を表示し、ユーザーがフィールドに値を入力している間に書式設定を行うことです。たとえば、入力すると、ユーザーが入力しているとき12345と同じように値が自動的に表示されるようにしたいと思います。12,345

これを行う簡単な方法はありますか?

Bootstrap で MVC5 Code-First を使用しています。私の調査では、MVC3/4 のいくつかの可能なオプションを見つけましたが、それらのほとんどは実装が面倒です。


編集

currencyフィールドの値を自分EditorFor()Grid.Mvc( https://gridmvc.codeplex.com ) 列の両方に表示する方法を探してい[cost]ます。

@try
{
    @Html.Grid(Model).Columns(columns =>
    {
        columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => @<a href="/INV_Assets/Edit/@o.Id" class="btn btn-primary btn-sm noDecoration"><span class="glyphicon glyphicon-pencil"></span> @*Edit*@</a>).SetWidth(15);
        columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => @<a href="/INV_Assets/Delete/@o.Id" class="btn btn-danger btn-sm noDecoration"><span class="glyphicon glyphicon-remove-circle"></span> @*Delete*@</a>).SetWidth(15);
        columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => @<a href="/INV_Assets/Details/@o.Id" class="btn btn-default btn-sm noDecoration"><span class="glyphicon glyphicon-eye-open"></span> @*View*@</a>).SetWidth(15);
        columns.Add(o => o.Status.status_description).Titled("Status").RenderValueAs(o => o.Status.status_description).Sanitized(false).Encoded(false).Sortable(true).Filterable(true).SetWidth(20);
        columns.Add(o => o.Location.location_dept).Titled("Dept").RenderValueAs(o => o.Location.location_dept).SetWidth(20);
        columns.Add(o => o.Location.location_room).Titled("Room").RenderValueAs(o => o.Location.location_room).SetWidth(20);
        columns.Add(o => o.owner).Titled("Owner").RenderValueAs(o => o.owner).SetWidth(20);
        columns.Add(o => o.Type.type_description).Titled("Type").RenderValueAs(o => o.Type.type_description).SetWidth(20);
        columns.Add(o => o.Manufacturer.manufacturer_description).Titled("Manufacturer").RenderValueAs(o => o.Manufacturer.manufacturer_description).SetWidth(20);
        columns.Add(o => o.Model.model_description).Titled("Model").RenderValueAs(o => o.Model.model_description).SetWidth(20);
        columns.Add(o => o.Vendor.vendor_name).Titled("Vendor").RenderValueAs(o => o.Vendor.vendor_name).SetWidth(20);
        columns.Add(o => o.description).Titled("Desc").RenderValueAs(o => o.description).SetWidth(20);
        columns.Add(o => o.asset_tag_number).Titled("Asset Tag #").RenderValueAs(o => o.asset_tag_number).SetWidth(20);
        columns.Add(o => o.serial_number).Titled("Serial #").RenderValueAs(o => o.serial_number).SetWidth(20);
        columns.Add(o => o.ip_address).Titled("IP Addr").RenderValueAs(o => o.ip_address).SetWidth(20);
        columns.Add(o => o.mac_address).Titled("Mac Addr").RenderValueAs(o => o.mac_address).SetWidth(20);
        columns.Add(o => o.po_number).Titled("PO #").RenderValueAs(o => o.po_number).SetWidth(20);
        columns.Add(o => o.invoice_number).Titled("Inv. #").RenderValueAs(o => Convert.ToString(o.invoice_number)).SetWidth(20);
        columns.Add(o => o.cost).Titled("Cost").RenderValueAs(o => "$" + Convert.ToString(o.cost)).SetWidth(20);
        columns.Add(o => o.note).Titled("Note").RenderValueAs(o => o.note).SetWidth(20);
        columns.Add(o => o.acquired_date).Titled("Acq. Date").RenderValueAs(o => Convert.ToString(o.acquired_date)).SetWidth(20);
        columns.Add(o => o.disposed_date).Titled("Disp. Date").RenderValueAs(o => Convert.ToString(o.disposed_date)).SetWidth(20);
        columns.Add(o => o.created_date).Titled("Crtd. Date").RenderValueAs(o => Convert.ToString(o.created_date)).SetWidth(20);
        columns.Add(o => o.created_by).Titled("By").RenderValueAs(o => o.created_by).SetWidth(20);
        columns.Add(o => o.modified_date).Titled("Mod. Date").RenderValueAs(o => Convert.ToString(o.modified_date)).SetWidth(20);
        columns.Add(o => o.modified_by).Titled("By").RenderValueAs(o => o.modified_by).SetWidth(20);
    }).WithPaging(10).Sortable().Filterable().WithMultipleFilters();
}
catch (NullReferenceException ex)
{
    return;
}

[cost]モデルで を として定義しましdecimalたが、グリッドでは値が である必要がありますstringConvert.ToString()これにより、注釈[DataType(DataType.Currency)]など[DisplayFormat(DataFormatString="{0:C}", ApplyFormatInEditMode=true)]が有効にならなくなっていると思いますpublic decimal cost { get; set; }か?

 [DataType(DataType.Currency)]
 [DisplayFormat(DataFormatString="{0:C}", ApplyFormatInEditMode=true)]
  public decimal cost { get; set; }

理想的には、常に値を表示 (例) し、ユーザーが値を単純な 10 進数として入力できるようにし、クリックして1222345.47値をフォーマットに視覚的にフォーマットする必要があります。$1,222,345.47EditorFor()currency

誰でもこれを行う方法を提供できますか?


EDIT2

EditorFor()以下のカスタムフォーマット文字列を使用して、値を正しく表示しました。

[DisplayFormat(DataFormatString = "{0:#,###0.00}", ApplyFormatInEditMode=true)]

Chris が述べたように、モデルが値を有効なものとして受け入れるためには、「,」を取り除かなければなりません。これは、フォームが投稿しようとするときにできると思います。

MVCGrid私のcurrency形式で値を表示する方法をまだ見つけようとしています。

4

2 に答える 2

1

これは二面的な答えです。データを表示する限り、次のようにプロパティを簡単に装飾できます。

[DisplayFormat(DataFormatString = "{0:C}")]
public Decimal cost { get; set; }

または

[DataType(DataType.Currency)]
public Decimal cost { get; set; }

同様に機能します。

ただし、値を編集する場合は、もう少し複雑です。calledDisplayFormatに加えてパラメータを取ります。これを に設定すると、Razor によってレンダリングされる値も選択した形式になります。しかし、実行してそれを行う前に、ここでの問題は、「$1,234.56」のような投稿された値が、modelbinder によって 10 進数値として処理されないことです。DataFormatStringApplyInEditModetrue

この機能と必要な入力時の書式設定機能を実現するには、単純に JavaScript を使用する必要があります。入力値をフォーマットできる JavaScript プラグインは無数にあります。「javascript 形式の入力値」などを Google で検索すると、必要以上の結果が得られるはずです。自分に合ったものを見つけて使用してください。

于 2015-02-18T17:23:01.433 に答える