【问题标题】:Asp.Net Core MVC CalculatorAsp.Net Core MVC 计算器
【发布时间】:2021-08-26 12:37:42
【问题描述】:

我在 Asp.Net Core Mvc 上做一个计算器,遇到了一个问题。我有CalcModelCalcController。还有IndexCalculator 视图。

public class CalcModel
    {
    
        public decimal FirstNumber { get; set; }
        public decimal SecondNumber { get; set; }
        public decimal Result { get; set; }
        public CalculationMethod calculationMethod { get; set; }
    
        public enum CalculationMethod
        {
            [Display(Name = "+")]
            Addition,
            [Display(Name = "-")]
            Subtraction,
            [Display(Name = "*")]
            Multiplication,
            [Display(Name = "/")]
            Division
        }
    }

我的控制器

[HttpPost]
        public async Task<IActionResult> IndexCalculator(CalcModel model)
        {
            ModelState.Clear();
            switch (model.calculationMethod)
            {
                case CalculationMethod.Addition:
                    model.Result = model.FirstNumber + model.SecondNumber;
                    break;
                case CalculationMethod.Subtraction:
                    model.Result = model.FirstNumber - model.SecondNumber;
                    break;
                case CalculationMethod.Multiplication:
                    model.Result = model.FirstNumber * model.SecondNumber;
                    break;
                case CalculationMethod.Division:
                    model.Result = model.FirstNumber / model.SecondNumber;
                    break;
            }
            return View(model);
        }

还有我的妻子:

 @using (Html.BeginForm("IndexCalculator", "Calc", FormMethod.Post, new { enctype = "multipart/form-data" }))
        {
            @Html.LabelFor(m => m.FirstNumber) @Html.TextBoxFor(x => x.FirstNumber)<br />
            @Html.LabelFor(m => m.SecondNumber) @Html.TextBoxFor(x => x.SecondNumber)<br />
            @Html.LabelFor(m => m.Result) @Html.TextBoxFor(x => x.Result)<br />
            @Html.DropDownListFor(m => m.calculationMethod, (Html.GetEnumSelectList<CalcModel.CalculationMethod>()))
            <input type="submit" />

请告诉我如何制作带有数字的键盘,这样您就不必手动输入了。 现在我有三个labelForDropDownListFor 来选择方法。

【问题讨论】:

  • 您是否正在寻找一些显示在您的输入下方/旁边的“虚拟”键盘?如果是这样,您可以使用 javascript 库/插件,例如:jqueryscript.net/other/…
  • 不是,我想做一个类似Windows的计算器

标签: c# asp.net-core-mvc


【解决方案1】:

我想做一个类似Windows的计算器

您可以使用 Bootstrap 显示数字键盘和计算图标,然后使用JavaScript eval() Function 来计算结果。

示例代码如下(参考this link):

<div class='container'>
    <div class='row'>
        <form class='form-group-lg form-inline' onsubmit='return false'>
            <input type='text' id='calcinput' class='focusedInput form-control'>
            <button type='submit' class='btn btn-warning btn-lg'>Clear</button>
        </form>
    </div>
</div>
<div class='container-fluid'>
    <div class='row'>
        <div class='col-xs-1 col-xs-offset-4'>
            <button class='btn btn-lg btn-primary' type='button'>7</button>
        </div>
        <div class='col-xs-1'>
            <button class='btn btn-lg btn-primary' type='button'>8</button>
        </div>
        <div class='col-xs-1'>
            <button class='btn btn-lg btn-primary' type='button'>9</button>
        </div>
        <div class='col-xs-1'>
            <button class='btn btn-lg btn-primary' type='button'>+</button>
        </div>
    </div> <!--row-->
    <div class='row'>
        <div class='col-xs-1 col-xs-offset-4'>
            <button class='btn btn-lg btn-primary' type='button'>4</button>
        </div>
        <div class='col-xs-1'>
            <button class='btn btn-lg btn-primary' type='button'>5</button>
        </div>
        <div class='col-xs-1'>
            <button class='btn btn-lg btn-primary' type='button'>6</button>
        </div>
        <div class='col-xs-1'>
            <button class='btn btn-lg btn-primary' type='button' id='small'>-</button>
        </div>
    </div> <!--row-->
    <div class='row'>
        <div class='col-xs-1 col-xs-offset-4'>
            <button class='btn btn-lg btn-primary' type='button'>1</button>
        </div>
        <div class='col-xs-1'>
            <button class='btn btn-lg btn-primary' type='button'>2</button>
        </div>
        <div class='col-xs-1'>
            <button class='btn btn-lg btn-primary' type='button'>3</button>
        </div>
        <div class='col-xs-1'>
            <button class='btn btn-lg btn-primary' type='button' id='small'>*</button>
        </div>
    </div> <!--row-->
    <div class='row'>
        <!--row-->
        <div class='col-xs-1 col-xs-offset-4'>
            <button class='btn btn-lg btn-primary' type='button'>0</button>
        </div>
        <div class='col-xs-1'>
            <button class='btn btn-lg btn-primary' type='button' id='small'>.</button>
        </div>
        <div class='col-xs-1'>
            <button class='btn btn-lg btn-primary' type='submit' id='submit'>=</button>
        </div>
        <div class='col-xs-1'>
            <button class='btn btn-lg btn-primary' type='button' id='small'>/</button>
        </div>
    </div>
</div>

在上述视图页面的最后,添加以下脚本:

@section Scripts{
    <script>
        $(document).ready(function () {
            $('.col-xs-1').click(function () {
                if ($(this).text().trim() !== '=') {
                    var text = $(this).text().toString()
                    $('input:text').val(function (i, val) {
                        return val + text.trim();
                    });
                }
            })
            $('.btn-warning').click(function () {
                $('input:text').val('');
            })
            $('#submit').click(function () {
                var expr = $('input').val();
                var res = eval(expr);
                $('input:text').val(res);
            })
        });
    </script>
}

样式文件如下:

<style>
    .focusedInput {
        border-color: rgba(82,168,236,.8);
        outline: 0;
        outline: thin dotted \9;
        -moz-box-shadow: 0 0 8px rgba(82,168,236,.6);
        box-shadow: 0 0 8px rgba(82,168,236,.6) !important;
    }

    body {
        background-color: gainsboro;
    }

    .form-inline {
        text-align: center;
    }

    .col-xs-1 {
        margin-right: 8px;
        margin-top: 44px;
    }

    #small {
        margin-left: 2px;
    }

    h1 {
        font-size: 56px;
        margin-bottom: 20px; 
    }

    .btn {
        font-family: Georgia;
        font-size: 22px
    }

    input {
        text-align: right; 
    }
</style>

然后,结果如下:

之后,如果要将计算结果保存到数据库中,可以使用JQuery 查找文本框的值,然后使用Ajax 方法调用action 方法。您可以参考以下链接:

JQuery AJAX and JSON Example in ASP.Net Core MVC

How to use jQuery AJAX method to call an Action method in ASP.NET Core

【讨论】:

  • 非常感谢,但这是用纯 js 编写的,但是如何在 c# 的控制器中进行微积分?
  • 嗨@WarmingZ,我不知道你为什么拒绝我的回复,如果你不想用这种方式,你可以给我评论,然后,我会改变答案。那么,在视图页面中,还有两个输入文本框可以输入值,然后发送给控制器?如果是这种情况,在单击数字键盘后,您可以获得选定的值,并将它们放在您的 FirstNumber 或 SecondNumber 文本框中。之后,您可以将表单提交到 action 方法或使用 JQuery Ajax 将数据传输到 action 方法。
  • 嘿!抱歉,我没有对你的帖子投反对票。是的,我被剥夺了投票的机会
  • @WarmingZ,Okey,明白了。那么,在视图页面中,你还想用两个输入文本框输入值,然后将值发送给控制器吗?如果是这种情况,在数字键盘单击事件中,您可以获取选定的值,并将它们放在 FirstNumber 或 SecondNumber 文本框中,然后将它们发送到控制器。
猜你喜欢
  • 1970-01-01
  • 2022-11-15
  • 2021-09-18
  • 2016-05-23
  • 2013-10-26
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多