Привязка модели ASP.NET прерывается при использовании десятичных значений - PullRequest
0 голосов
/ 30 октября 2018

У меня есть следующий сценарий. У меня есть форма, которая отправляет сообщение в контроллер. Все отлично работает, когда я вводю не десятичное число на входе ValorKilometro. Я могу получить модель отлично на контроллере и так. Дело в том, что при вводе десятичного значения свойство ValorKilometro всегда устанавливается в 0. Почему это ?. Вот код:

<form name="theForm" action="" style="margin: 0 auto; width: 80%;" method="post" onsubmit="return onFormSubmit();">
    ...
    <div class="form-group">
        <label for="usr">Valor de Kilometro:</label>
        <input type="number" name="ValorKilometro" min="0" step="any" class="form-control" value="@Model.ValorKilometro">
    </div>
    <button type="submit" id="boton" class="btn btn-success">Guardar</button>
</form>

Модель:

public class ConfiguracionModel
{
    public Guid EmpresaGuid { get; set; }
    public bool MaximoHabilitado { get; set; }
    public int MontoMaximo { get; set; }
    public Guid Moneda { get; set; }
    public Double ValorKilometro { get; set; }
}

Контроллер:

    [Authorize, AdminAuthorization]
    [HttpPost]
    public ActionResult Configuracion(ConfiguracionModel configuracion)
    {
        configuracion.EmpresaGuid = SQL.GetEmpresaGuid(User.Identity.Name);

        SQL.ModificarConfiguracion(configuracion);

        TempData["msg"] = "<script>alert('Los cambios fueron guardados correctamente!.');</script>";

        return View(configuracion);
    }

Я надеюсь, что кто-то может помочь мне с этим. Спасибо.

1 Ответ

0 голосов
/ 30 октября 2018

Вы пытались использовать @Html.TextBoxFor помощник?

@model ConfiguracionModel // <-- obviously you need to bind your View to your model

@Html.TextBoxFor(m => m.ValorKilometro, "{0:n2}", new { 
    @class = "form-control", 
    @type = "number", 
    @min = "0" })

Вы также можете добавить ограничение проверки к вашей модели:

public class ConfiguracionModel
{
   public Guid EmpresaGuid { get; set; }
   public bool MaximoHabilitado { get; set; }
   public int MontoMaximo { get; set; }
   public Guid Moneda { get; set; }

   [Range(0.0, double.MaxValue)]
   [DisplayFormat(DataFormatString = "{0:n2}", ApplyFormatInEditMode = true)]
   public Double ValorKilometro { get; set; }
}

Обратите внимание, что {0:n2} обозначает 2 десятичных знака.

...