Я новичок в MVC и пытаюсь развить денежный обмен, в котором есть текстовое поле и два списка переливов валют для обмена. Я использовал веб-службу API, в которой есть таблица имен валют, страны и значений. Моя проблема заключается в вычислении значения из API после того, как пользователь отправил метод действия после вставки суммы в ConversionRate, поскольку я всегда получаю значение 0! Что я здесь делаю неправильно?Потребляемая стоимость от API
Индекс Действие Метод
[HttpPost]
public ActionResult Index(Currencies cur)
{
if (cur.ConversionRate.Equals(null))
{
ModelState.AddModelError("", "Please enter a numeric value");
}
if (cur.FromCurrencyId == cur.ToCurrencyId)
{
//do something if same currecnies and return.
ModelState.AddModelError("", "Can't make the conversion for the same curreny");
}
else
{
if (ModelState.IsValid)
{
CurrenciesClient Cur = new CurrenciesClient();
var listCurrency = Cur.findAll().ToList();
Currencies model = new Currencies();
model.FromCurrencies = new SelectList(listCurrency,"FromCurrencyId", "CurrencyName","Value");
model.ToCurrencies = new SelectList(listCurrency, "ToCurrencyId", "CurrencyName","Value");
ViewBag.TheResult = listCurrency.Where(c => c.FromCurrencyId == cur.FromCurrencyId && c.ToCurrencyId == cur.ToCurrencyId).FirstOrDefault().ConversionRate * cur.Value;
return PartialView("_CurrencyValue");
}
}
return View();
}
API веб-сервиса CurrenciesClient
public class CurrenciesClient
{
private string base_Url = "http://localhost:51646/api/";
public IEnumerable<Currencies> findAll()
{
try
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(base_Url);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.GetAsync("currencies").Result;
if (response.IsSuccessStatusCode)
{
var resposeData = response.Content.ReadAsStringAsync().Result;
var Currency = JsonConvert.DeserializeObject<List<Currencies>>(resposeData);
return Currency;
}
return null;
}
catch
{
return null;
}
}
}
Валюта VM
public class Currencies
{
public int Id { get; set; }
[Required(ErrorMessage = " message")]
public int FromCurrencyId { get; set; }
public SelectList FromCurrencies { get; set; }
[Required]
public int ToCurrencyId { get; set; }
public SelectList ToCurrencies { get; set; }
public string CurrencyName { get; set; }
public string CurrencyCountry { get; set; }
[Required(ErrorMessage ="Please enter a numeric value")]
public decimal ConversionRate { get; set; }
public decimal Value { get; set; }
public SelectList AvailableCurrencies { get; set; }
}
Index Просмотр
@model Project.ViewModels.Currencies
@{
ViewBag.Title = "Index";
}
<div id="ConversionSection">
@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "post", InsertionMode = InsertionMode.Replace, UpdateTargetId = "ConversionSection" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.TextBoxFor(m => m.ConversionRate, new { @class = "form-control" })
@Html.DropDownListFor(m => m.FromCurrencyId, Model.FromCurrencies as IEnumerable<SelectListItem>, new { @class = "form-control" })
@Html.DropDownListFor(m => m.ToCurrencyId, Model.ToCurrencies as IEnumerable<SelectListItem>, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.ToCurrencyId, "", new { @class = "text-danger" })
<br />
<button type="submit" class="btn btn-primary">Convert</button>
}
</div>
@section scripts{
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
}
сложно сказать. Установили ли вы некоторые точки останова, чтобы вы могли проверять значения, размещенные на странице, и значения, возвращаемые API, чтобы вы могли увидеть, что что-то пустое или 0 где-то неожиданно? – ADyson
Да, я установил точку прерывания, и самая запутанная часть - это все API возвращает граф валют, т. Е. На основе идентификаторов, за исключением значения, которое всегда равно 0! – Dodi
API возвращает список всех валют. Затем вы выбираете первый элемент из списка, который соответствует вашему из/в валюту, и выберите свойство ConversionRate из этого первого элемента. Предполагая, что это на самом деле ваше намерение, вам нужно проверить, правильно ли заполнено ConversionRate, а также правильно ли заполняется cur.Value. Я не вижу, где в это входит свойство count или «Value»? – ADyson