我有一个MVC项目。
此项目的Insert
代码为Insert()
Model
接受模型ModelState.IsValid
。
问题是,当我没有填写非必填字段false
时,在客户端ReportedCount
提交表单时ModelState.IsValid
为ReportedCount
。
当该字段留空时,代码会自动将其选为0,因为它是一个int。我在调试期间尝试将其操作为不同的数字,但ModelState
不会更改。
我知道错误只发生在ReportedCount
字段。当我在调试期间进入public class Model
{
[Required(ErrorMessage = "ID field is required.")]
public string ID { get; set; }
[Range(0, 100000, ErrorMessage = "Invalid Number")]
public int ReportedCount { get; set; }
[Required]
public string UserName { get; set; }
}
时,唯一出现错误的密钥是 [HttpPost]
public ActionResult Insert(Model model)
{
bool insert = false;
if (ModelState.IsValid)
{
insert = Service.Insert(model);
}
// If information was inserted properly.
if (insert == true)
{
TempData["message"] = "<b>Input successful :</b> Data entered for id " + model.ID;
TempData["success"] = "true";
}
else
{
// System error has priority to be displayed first.
if (DatabaseError != null)
{
TempData["message"] = DatabaseError;
TempData["success"] = "false";
}
else
{
// Create element showing Model errors.
string message = "";
message = message + "<b>There was an error inserting your data.</b> <ul>";
foreach (ModelState modelState in ViewData.ModelState.Values)
{
foreach (ModelError error in modelState.Errors)
{
message = message + "<li>" + error.ErrorMessage + "</li>";
}
}
message = message + DatabaseError + "</ul>";
TempData["message"] = message;
TempData["success"] = "false";
}
}
return RedirectToAction("Index");
}
。所以,当然我继续并使用填充了数字的字段重新提交表单,在这种情况下它被接受(IsValid = true)。
以下是模型:
<html>
<div class='form-group required'>
<label class='control-label'>ID</label>
<select name="ID" class='form-control required' id="DD_ID" required>
<option value="">Select ID</option>
</select>
</div>
<div class='form-group'>
<label class='control-label'>Reported Count</label>
<input class='form-control' type='number' name="ReportedCount">
</div>
<div class='form-row'>
<input class='form-control' id='username' type='hidden' name="UserName" value="@(ViewBag.UserName)" />
</div>
</html>
以下是控制器操作:
{{1}}
输入的html代码(View):
{{1}}