C# 如何修复ModelState.IsValid,使其作为参与者工作?
嘿,不知道这里发生了什么我以前做过这个,效果很好。但是现在我的ModelState.IsValid无法正常工作。在我的模型视图中,我设置了它,因此如果文本框为空,它将不会执行if语句中的代码,但在有空时返回true。此外,当我出于某种原因在模型CreaditCalculator中输入字段时,似乎没有设置字段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
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我以前尝试过调试,但甚至没有进入模型