2017-01-31 3 views
2

Я собираюсь прямо здесь.ASP.NET MVC C# DisplayFormat Issue

Я пытаюсь показать Monthly Income, чтобы иметь только 2 десятичных слова.

Я пытался использовать DisplayFormat, но он не работает, когда я добавляю его в текстовое поле.

Модель

public class AgentModel 
{ 

    [Display(Name = "Monthly Income")] 
    [DisplayFormat(DataFormatString = "{0:0.00}", ApplyFormatInEditMode = true)] 
    public decimal MonthlyIncome { get; set; } 
} 

Посмотреть

//this input display the two decimal 
@Html.EditorFor(m => m.MonthlyIncome, new { htmlAttributes = new { @class = "form-control" } }) 

//this one display 5 decimal 
@Html.TextBoxFor(m => m.MonthlyIncome, new { @class = "form-control"}) 

Я запутался в чем разница между этими двумя входами. Я использую DataFormat, потому что я хочу, чтобы формат был централизован на моей модели. и не использовать этот код @string.Format("{0:N2}",decimal.Round(agent.MonthlyIncome, 2, MidpointRounding.AwayFromZero)) для ограничения десятичных знаков. так как я буду делать это во всех своих взглядах, если это то, что я делаю.

Я также попытался просто вывести значение monthly income

<td>@agent.MonthlyIncome</td> 

это все еще возвращает 5 знаков после запятой.

ответ

6

Чтобы отобразить отформатированный значение с помощью TextBoxFor(), используйте this overload

@Html.TextBoxFor(m => m.MonthlyIncome, "{0:0.00}", new { @class = "form-control"}) 

2-ой параметром является строка формата. Обратите внимание, что DisplayFormatAttribute только уважаться при использовании EditorFor() или DisplayFor()

Заметим также, что <td>@Html.DisplayFor(m => m.MonthlyIncome)</td> будет оказывать значение с правильным форматом.

+0

Я вижу ..., так что мне нужно добавить параметр формата на каждый вид на которые у меня есть? где, как если бы я использовал EditorFor, он автоматически добавит dataanotation в мою модель. –

+0

Если вы хотите использовать 'TextBoxFor()', тогда да. Но есть ли причина, по которой вы не хотите использовать 'EditorFor()' - 2 реализации в вашем вопросе будут генерировать идентичный html. –

+0

Привет, steph .. Я собираюсь использовать 'EditorFor', поскольку он эффективен, когда дело доходит до редактирования формата текстового поля .... однако, как я могу отобразить формат« MonthlyIncome », если я попытался добавить это на моем столе liek это ' @agent.MonthlyIncome 'coz он все равно отобразит 5 знаков после запятой, в отличие от использования' EditorFor', он преобразует его в текстовое поле и преобразует отображение? –

0

DisplayFormat работает только с EditorFor/DisplayFor. Посмотрите на this скрипка для mvc.

Модель

с использованием системы; с использованием System.ComponentModel.DataAnnotations;

namespace HelloWorldMvcApp 
{ 
    public class SampleViewModel 
    { 
     [Required] 
     [MinLength(10)] 
     [MaxLength(100)] 
     [Display(Name = "Ask Magic 8 Ball any question:")] 
     public string Question { get; set; } 

     [DisplayFormat(DataFormatString = "{0:0.00}", ApplyFormatInEditMode = true)] 
     public decimal MonthlyIncome { get; set; } 

     //See here for list of answers 
     public string Answer { get; set; } 
    } 
} 

Контроллер

using System; 
using System.Web.Mvc; 
using System.Collections.Generic; 

namespace HelloWorldMvcApp 
{ 
    public class HomeController : Controller 
    { 
     [HttpGet] 
     public ActionResult Index() 
     { 
      var s = new SampleViewModel(); 
      s.MonthlyIncome = 1000; 
      return View(s); 
     } 


     [HttpPost] 
     public JsonResult GetAnswer(string question) 
     {    
      int index = _rnd.Next(_db.Count); 
      var answer = _db[index]; 
      return Json(answer); 
     } 

     private static Random _rnd = new Random(); 

     private static List<string> _db = new List<string> { "Yes", "No", "Definitely, yes", "I don't know", "Looks like, yes"} ; 
    } 
} 

Посмотреть

@model HelloWorldMvcApp.SampleViewModel 
@{ 
    Layout = null; 
} 

<!DOCTYPE html> 
<!-- template from http://getbootstrap.com/getting-started --> 

<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <title>Bootstrap 101 Template</title> 

     <!-- CSS Includes --> 
     <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css"> 

     <style type="text/css"> 

      .field-validation-error { 
       color: #ff0000; 
      } 

     </style> 
    </head> 

    <body> 
     <div class="container"> 
      <div class="col-md-6 col-md-offset-3"> 
       <h1>Hello Stranger</h1> 

       @using (Html.BeginForm()) 
       { 
        <div class="form-group"> 
         @Html.LabelFor(m => m.Question) 
         @Html.TextBoxFor(model => model.Question, new {@class="form-control"}) 
         @Html.ValidationMessageFor(model => model.Question) 
        </div> 
        @Html.DisplayFor(m => m.MonthlyIncome) 

        <button type="button" class="btn btn-success submit">Ask</button> 
       } 

       <br/><br/> 
       <div class="alert alert-warning fade"> 
        <img src="http://entechprod.blob.core.windows.net/dotnetfiddle/morpheus.jpg" style="max-width:100%;"/><br/><br/> 
        <strong><span class="alert-content"></span></strong> 
       </div> 
      </div> 
     </div> 

     <!-- JS includes --> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
     <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script> 

     <script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script> 
     <script src="//ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.min.js"></script> 

     <script type="text/javascript"> 

      function openAlert(txt) { 
       $('.alert-content').text(txt); 
       $('.alert').addClass('in'); 
      } 

      function closeAlert() { 
       $('.alert').removeClass('in'); 
      } 

      $(function(){ 
       var answer = '@Model.Answer'; 

       if(answer && answer != '') 
        openAlert(answer); 

       $('#Question').change(closeAlert); 
       $('#Question').keyup(closeAlert); 

       $('.submit').click(function(){ 
        if($('form').valid()) { 

         $.ajax({ 
          url: '@Url.RouteUrl(new{ action="GetAnswer", controller="Home"})', 
          data: {Answer: '', Question: $('#Question').val()}, 
           type: 'POST', 
           dataType: 'json', 
           contentType: "application/json; charset=utf-8", 
           success: function(resp) { 
           openAlert(resp); 
         }}); 
        } 
        else { 
         closeAlert(); 
        } 
       }); 

      }); 

     </script> 
    </body> 
</html> 
Смежные вопросы