Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何修复ModelState.IsValid,使其作为参与者工作?_C#_Asp.net Mvc - Fatal编程技术网

C# 如何修复ModelState.IsValid,使其作为参与者工作?

C# 如何修复ModelState.IsValid,使其作为参与者工作?,c#,asp.net-mvc,C#,Asp.net Mvc,嘿,不知道这里发生了什么我以前做过这个,效果很好。但是现在我的ModelState.IsValid无法正常工作。在我的模型视图中,我设置了它,因此如果文本框为空,它将不会执行if语句中的代码,但在有空时返回true。此外,当我出于某种原因在模型CreaditCalculator中输入字段时,似乎没有设置字段 Controller: CreditCardCalculatorController using System; using System.Collections.Generic; usi

嘿,不知道这里发生了什么我以前做过这个,效果很好。但是现在我的ModelState.IsValid无法正常工作。在我的模型视图中,我设置了它,因此如果文本框为空,它将不会执行if语句中的代码,但在有空时返回true。此外,当我出于某种原因在模型CreaditCalculator中输入字段时,似乎没有设置字段

Controller: CreditCardCalculatorController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using reviewCreditCardPaymentCalculator.Models;

namespace reviewCreditCardPaymentCalculator.Controllers
{
    public class CreditCardCalculatorController : Controller
    {
        // GET: CreditCardCalculator
        [HttpPost]
        public ActionResult Index(CreditCalculator credit)
        {
            if (ModelState.IsValid)
            {
                decimal financeCharge = 0.0m;
                decimal newBalance = 0.0m;
                decimal minPayment = 0.0m;

               
                if (credit.OldBalance <= 20)
                {
                    financeCharge = credit.OldBalance * 0.015m;

                    newBalance = credit.OldBalance * 1.015m + credit.Charge  - credit.Credit;

                    minPayment = newBalance;
                }
                else
                {
                    financeCharge = credit.OldBalance * 0.015m;
                    newBalance = credit.OldBalance * 1.015m + credit.Charge - credit.Credit;

                    minPayment = (newBalance - 20) * 1.10m;
                }

                ViewBag.Message = $"Finance Charge: {string.Format("{0:C}", financeCharge)}\r\n" +
                                    $"New Balance: {string.Format("{0:C}", newBalance)}\r\n" +
                                    $"Min Payment: { string.Format("{0:C}", minPayment)}";
            }

            return View();
        }


        [HttpGet]
        public ActionResult Index()
        {
            return View();
        }
    }
}

Model: CreditCalculator

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using reviewCreditCardPaymentCalculator.Controllers;

namespace reviewCreditCardPaymentCalculator.Models
{
    public class CreditCalculator
    {
        [Required(ErrorMessage = "Please enter your old balance")]
        public int OldBalance { get; set; }

        [Required(ErrorMessage = "Please enter your new charge amount")]
        public int Charge { get; set; }

        [Required(ErrorMessage = "Please enter your credit amount")]
        public int Credit { get; set; }
    }
}


View

@model reviewCreditCardPaymentCalculator.Models.CreditCalculator

@{
    ViewBag.Title = "Credit Card Calculator";
}

<h2>Credit Card Payment Calculator</h2>

@using (Html.BeginForm())
{
    @Html.ValidationSummary();

    <p><label>Old Balance: </label> @Html.TextBoxFor(m => m.OldBalance)</p>

    <p><label>Charges: </label> @Html.TextBoxFor(m => m.Charge)</p>

    <p><label>Credit: </label> @Html.TextBoxFor(m => m.Credit)</p>

    <p><input type="submit" value="Calculate" /></p>

    @ViewBag.Message

}
控制器:信用卡计算器控制器
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.Mvc;
使用reviewCreditCardPaymentCalculator.Models;
命名空间reviewCreditCardPaymentCalculator.Controllers
{
公共类CreditCardCalculatorController:控制器
{
//获取:信用卡计算器
[HttpPost]
公共行动结果指数(CreditCalculator credit)
{
if(ModelState.IsValid)
{
十进制财务费用=0.0m;
十进制新天平=0.0m;
十进制最小付款=0.0m;
如果(贷方余额m.OldBalance)

费用:@Html.TextBoxFor(m=>m.Charge)

Credit:@Html.TextBoxFor(m=>m.Credit)

@查看包。留言 }
使用
@使用(Html.BeginForm(“Index”,“CreditCardCalculatorController”,FormMethod.Post))

int
更改为
int?
(又称
可为null
)。对于数字表单字段,您还应该使用
而不是
(您需要为
扩展方法自定义
文本框)。您的表单可能正在发送GET not a POST(您可以使用浏览器中的网络工具监视提交请求来验证这一点)。使用(HTML.BeginForm(“Index”,“CreditCardCalculatorController”,FormMethod.POST)将BeginForm输出为表单标记的正确HTML,方法类似于
。)
非常感谢您的帮助,很遗憾,这里发生的事情还不是100%确定。如果我弄明白了,我会给您发帖。很遗憾,我没有工作。我使用了@using(Html.BeginForm(“Index”,“CreditCardCalculator”,FormMethod.post))它可以工作,但它给了我与以前相同的结果。您是否使用调试器来逐步查看发生的情况?我将使用调试器并在“自动”选项卡中查看。首先,使用调试器,它将告诉您模型错误的位置。Woot找到了它!因为我在我的公共ActionResult索引(CreditCalculator credit)中命名与我的现场学分相同。我将其更改为cre,现在可以使用了。感谢您的帮助!ps我以前尝试过调试,但甚至没有进入模型