Конвертация валюты

Я новичок в MVC и все еще учась! Я пытаюсь создать очень базовое приложение в своем Интернете, которое позволяет пользователям конвертировать денежную стоимость в соответствии с их предпочтениями. Я сделал веб-APi и был успешным, чтобы вызвать службу в мое пространство MVC_ATM . Контроллеры { общественный класс CurrencyController : Controller { [ HttpGet ] // GET: Валюта общественного ActionResult Index () { CurrenciesClient Cur = новый CurrenciesClient (); var listCurrency = Cur . findAll (); SelectList list = new SelectList ( listCurrency , "Id" , "CurrencyName" ); ViewBag . listCurrencies = list ; return View (); } [ HttpPost ] public ActionResult Index ( Валюты cur ) { if (! ModelState . IsValid ) { string errors = string . Присоединиться ( "<br />" , ModelState . Значения . SelectMany ( x => x . Ошибки ) . Выберите ( x => x . ErrorMessage )); вернуть новый ContentResult { Content = errors }; var rate = Конвертировать . ToDecimal ( cur . ConversionRate ); if ( cur . CurrencyName == cur . CurrencyName ) { ModelState . AddModelError ( «CurrencyCountry» , «Невозможно выполнить преобразование для одного значения» ); } Еще если ( текущ . CurrencyName ! = Дворняжка . CurrencyName ) { Еогеасп ( вар валюты в текущ . CurrencyName ) { ViewBag . Theresult = rate * cur . Значение ; } return PartialView ( "_CurrencyValue" ); } } return View (); } } } s. Тем не менее, в моем контроллере мне удалось получить пространство имен проекта . Модель { public class Currencies { public int Id { get ; набор ; } public string CurrencyName { get ; набор ; } публичная строка CurrencyCountry { get ; set ;} public decimal Значение { get ; набор ; } public string ConversionRate { get ; набор ; } } } (имена) в индексном представлении, но не может @model Project . Модель . Валюта @ { ViewBag . Title = "Index" ; } <h2> Валюта </ h2 > <body> < div class = "converter" > Конвертировать : @Html . TextBoxFor ( m => m . ConversionRate , new { @size = "5" }) < div class = "form-group" > @Html . Ярлык ( «Преобразовать из» , новый { @class = "col-md-2 control-label" }) < div class = "col-md-10" > @Html . DropDownList ( «Список валют» , ViewBag . ListCurrencies как SelectList , «Выберите валюту» ) </ div > </ div > < div class = "form-group" > @Html . Ярлык ( "Конвертировать в" , новый { @class = "col-md-2 control-label" }) < div class = "col-md-10" > @Html . DropDownList ( «Список валют» , ViewBag . ListCurrencies как SelectList , «Пожалуйста, выберите валюту» ) </ div > </ div > <div> < button type = "submit" class = "btn btn-primary" > Преобразовать </ button > </ div > </ div > </ body > форму обратно после ввода значения в текстовое поле для создания частичного представления! Что я делаю неправильно в своих кодах ?!

Валютный контролер

POST

Модель валют

form

Просмотр индексов

Currencies

c#,asp.net-mvc-4,

0

Ответов: 2


2 принят

Пара замечаний - это POSTдействие и отсутствующий formтег в представлении. Вы создали POST-действие, которое принимает Currenciesмодель, но форма не публикует ее. Только ConversionRateпривязка к модели. Чтобы получить «Currency From» и «Currency To» и «Conversion Rate», вам потребуется другой подход / небольшие изменения.

ConversionModel.cs - новая модель для индексной страницы, в которой будут отображаться ваши обязательные поля.

public class ConversionModel
{
    [Required]//decimal would be better but up to you requirement
    public decimal ConversionRate { get; set; }

    [Required]
    public int FromCurrencyId {get;set;}
    public SelectList FromCurrencies {get;set;}

    [Required]
    public int ToCurrencyId {get;set;}
    public SelectList ToCurrencies {get;set;}
}

Получите: пока нет ничего плохого в том, что вы сделали, давайте использовать модельный подход и тесно связать его.

public ActionResult Index()
{
    CurrenciesClient Cur = new CurrenciesClient();
    var listCurrency = Cur.findAll();

    ConversionModel model = new ConversionModel();
    model.FromCurrencies = new SelectList(listCurrency,"Id", "CurrencyName");
    model.ToCurrencies = new SelectList(listCurrency,"Id", "CurrencyName");

    return View(model);

}

Сообщение: Важная вещь здесь, чтобы заметить, это SelectListне будет отправлено обратно. Только ConversionRate, FromCurrencyIdи ToCurrencyIdотправляются обратно не Списки. Если возникает ошибка, вам нужно будет перестроить списки и отправить их обратно в модель.

[HttpPost]
public ActionResult Index(ConversionModel curModel)
{
    if(ModelState.IsValid)
    {
        if(curModel.FromCurrencyId ==curModel.ToCurrencyId)
        {
            //do something if same currecnies and return.
        }
        else
        {
            //Get the currencyList with rates  from db
            //use currency ToCurrencyId and FromCurrencyId to fetch the 2 currencies
            // perform conversion with curModel.ConversionRate with existing logic
        } 
    }
    //Don'f forget to rebuild the Select Lists... 
    return View(curModel);
}

Посмотреть:

@model Project.Model.ConversionModel

@{
    ViewBag.Title = "Index";
}


@using (Html.BeginForm("Index", "Currency", FormMethod.Post)
{
    @Html.TextBoxFor(m => m.ConversionRate, new { @size = "5" })
    @* Please check the syntax *@
    @Html.DropDownListFor(m => m.FromCurrencyId , Model.FromCurrencies as SelectList)
    @Html.DropDownListFor(m => m.ToCurrencyId , Model.ToCurrencies as SelectList)
    <button type="submit" class="btn btn-primary">Convert</button>
}

Не CUT_COPY_PASTE. пожалуйста, проверьте наличие ошибок. Это всего лишь подход.

ajax POST, вероятно, следующее, что нужно узнать ... Сообщите нам.


1

Вы должны поместить свои элементы в форму следующим образом:

@using (Html.BeginForm("Index", "Currency", FormMethod.Post)
{
    // Your form items
}
C #, asp.net-MVC-4,
Похожие вопросы