Как использовать пакет Nuget UnitsNet в веб-приложении MVC?
Например, у меня есть мой объект:
public class UnitsNetTestViewModel
{
public int AnInput { get; set; }
public UnitsNet.Temperature OutdoorTemperature { get; set; }
}
Тогда мой взгляд
@model WebApplication.Models.UnitsNetTestViewModel
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.LabelFor(model => model.AnInput)
@Html.EditorFor(model => model.AnInput)
<br/>
@Html.LabelFor(model => model.OutdoorTemperature)
@Html.EditorFor(model => model.OutdoorTemperature)
<button type="submit">Submit</button>
}
В моем контроллере
public class UnitsNetTestController : Controller
{
// GET: UnitNetsTest
public ActionResult Index()
{
var model = new Models.UnitsNetTestViewModel {OutdoorTemperature = Temperature.FromDegreesFahrenheit(80)};
return View("~/Views/UnitsNetTest.cshtml", model);
}
[HttpPost]
public ActionResult Index(Models.UnitsNetTestViewModel model)
{
if (ModelState.IsValid)
{
return View("~/Views/Home/Index.cshtml");
}
return View("~/Views/UnitsNetTest.cshtml", model);
}
}
я пытался использовать EditorFor
или TextBoxFor
.Я также пытался связать другую часть объекта:
model => model.OutdoorTemperature.Value
model => model.OutdoorTemperature.DegreesFahrenheit
model => model.OutdoorTemperature
Даже при использовании комбинации EditorFor
model.OutdoorTemperature
я получаю полные поля ввода объекта, когда я обновляю значение, оно всегдавернуть в ноль в контроллере submit.
Что я делаю не так?
Спасибо.
РЕДАКТИРОВАТЬ 1
ПытатьсяЧтобы понять, как работает свойство UnitsNet, я добавил подкласс в свою модель, чтобы посмотреть, будет ли значение моего подкласса снова доступно в контроллере (даже если я уже знаю, что оно будет работать).Что я заметил из этого: в часах значение моего свойства model.Other
равно {...WebApplication.Models.SubClass}
, а тип также ...WebApplication.Models.SubClass
.Но для model.OutdoorTemperature
значение равно {0 K}
, а тип - UnitsNet.Temperature
.Может ли это быть подсказка?
Вот экран печати: 
Обновлен класс:
public class UnitsNetTestViewModel
{
public int AnInput { get; set; }
public UnitsNet.Temperature OutdoorTemperature { get; set; }
public SubClass Other { get; set; }
}
public class SubClass
{
public int Value { get; set; }
public int MySubClassValue { get; set; }
}
Обновлен вид:
@model WebApplication.Models.UnitsNetTestViewModel
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.LabelFor(model => model.AnInput)
@Html.EditorFor(model => model.AnInput)
<br />
@Html.LabelFor(model => model.OutdoorTemperature)
@Html.TextBoxFor(model => model.OutdoorTemperature.Value)
<br />
@Html.LabelFor(model => model.Other)
@Html.TextBoxFor(model => model.Other.Value)
<br />
@Html.LabelFor(model => model.Other)
@Html.TextBoxFor(model => model.Other.MySubClassValue)
<button type="submit">Submit</button>
}
РЕДАКТИРОВАТЬ 2
UnitsNet.Temperature
является структурой, а не классом.Вероятно, понадобится специальная модель переплета.