自定义验证属性不适用于按钮单击
本文关键字:按钮 单击 适用于 不适用 验证 属性 自定义 | 更新日期: 2023-09-27 18:25:15
我创建了一个函数,用于根据下拉列表中的选择对文本框输入的值进行验证。。假设下拉列表中选择的项目是amount,那么文本框中输入的值必须在10到20之间,就像这样,我还有两个验证。。为此,我在视图中有一个文本框、一个下拉列表和一个按钮
当我在文本框中输入值为30,并选择下拉列表项目为"Amount",然后单击提交按钮时,视图不会显示任何错误消息,并且(如果我将文本框留空,然后按下提交按钮,它应该显示错误消息,但不显示)(我已经编写了在服务器端验证这些消息的自定义函数)我在postValues方法上放了一个断点,但它没有命中。。。
为此,我已经这样做了(控制器部分)
public class CrossFieldsTxtboxesController : Controller
{
public ActionResult Index()
{
var itemsforDropdown = new List<SelectListItem> {
new SelectListItem{ Text = "Amount" , Value = "Amount"},
new SelectListItem{Text= "Pound", Value ="Pound"},
new SelectListItem {Text ="Percent", Value ="percent"}
};
ViewData["Listitems"] = itemsforDropdown;
return View("DdlCrossFields");
}
[HttpPost]
public ActionResult PostValues(CrossFieldValidation model)
{
if (!ModelState.IsValid)
{
return View(model);
}
else
{
return RedirectToAction("DdlCrossFields");
}
}
}
这是我的观点部分
@model MvcSampleApplication.Models.CrossFieldValidation
@{
ViewBag.Title = "DdlCrossFields";
}
<h2>DdlCrossFields</h2>
@using (Html.BeginForm())
{
<div class ="editor-field">
@Html.TextBoxFor(m => m.TxtCrossField)
@Html.ValidationMessageFor(m=>m.TxtCrossField)
</div>
@Html.DropDownList("Listitems",ViewData["Listitems"] as SelectList)
<input id="PostValues" type="Submit" value="PostValues" />
}
这是我的模型部件
public class CrossFieldValidation
{
public string DDlList1
{ get; set; }
[Required(ErrorMessage = "Quantity is required")]
[Display(Name= "Quantity:")]
[ValueMustbeInRange]
[NumericAttributes]
public string TxtCrossField
{ get; set; }
}
有人知道为什么点击按钮不起作用吗?有任何建议也将不胜感激非常感谢。。
我看不到在任何地方指定应该处理POST请求的操作(在您的情况下为PostValues
)。您可以使用Html.BeginForm
的重载并明确指定POST操作名称:
Html.BeginForm("PostValues", "CrossFieldsTxtboxes")
如果我是对的,那么您的POST请求将转到Index
操作,因此不会在那里检查ModelState.IsValid
。
您可以使用jQuery Unobtrusive验证插件使用客户端验证。请检查您的web.config
文件中是否有以下密钥:
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
但请注意,自定义验证属性需要额外的JavaScript代码才能在客户端上工作。
我看不出你在发帖时实际在哪里调用这个方法——你有javscript点击处理程序吗?
你需要在你的Html.BeginForm()
中有你想要去的方法和控制器,或者你可以在你的视图中有下面这样的东西:
@Html.ActionLink("Post Values", "PostValues", "CrossFieldsTxtboxesController", null, new { @class = "postValuesButton", onclick = "return false;" })