我有三个单选按钮和一个位置下拉列表。根据选择的单选按钮,下拉列表中的项目将使用JSON动态填充。 验证时,它显示验证错误消息:“字段PositionId必须是数字。” 它应该在哪里“请选择位置”。代码如下。请指导我。谢谢。
查看:
<div class="panel-body">
<div class="row-fluid">
<div class="span1" style="text-align: right;">@Html.RadioButtonFor(m => m.CompanyType, "", new { id = "India", @checked = true, onclick = "ShowHideControls('India')", style = "margin-bottom:5px"})</div>
<div class="span3">@Html.LabelFor(m => m.CompanyType, "India")</div>
</div>
<div class="row-fluid">
<div class="span1" style="text-align: right;">@Html.RadioButtonFor(m => m.CompanyType, "", new { id = "USA", onclick = "ShowHideControls('USA')", style = "margin-bottom:5px"})</div>
<div class="span3">@Html.LabelFor(m => m.CompanyType, "USA")</div>
</div>
<div class="row-fluid">
<div class="span1" style="text-align: right;">@Html.RadioButtonFor(m => m.CompanyType, "", new { id = "UK", onclick = "ShowHideControls('UK')", style = "margin-bottom:5px" })</div>
<div class="span3">@Html.LabelFor(m => m.CompanyType, "UK")</div>
</div>
</div>
<div id="position" class="row-fluid">
<div class="span3">@Html.LabelFor(m => m.PositionId, "Position")</div>
<div class="span3">@Html.DropDownListFor(m => m.PositionId, (IEnumerable<SelectListItem>)ViewBag.PositionList, "--Please select Position--", new { id = "PositionList" })</div>
<div class="span4"><font color="red">@Html.ValidationMessageFor(m => m.PositionId)</font></div>
</div>
function getPositions(code)
{
var url = '@Url.Content("~/")' + "Registration/GetPositions";
var ddltarget = '#PositionList';
$.getJSON(url, { Code: code }, function (data) {
$(ddltarget).empty();
$(ddltarget).append("<option>--Please select Position--</option>");
$.each(data, function (index, optionData) {
$(ddltarget).append("<option value=" + optionData.Value + ">" + optionData.Text + "</option>");
});
});
}
Controller:
public JsonResult GetPositions(string code)
{
DataTable dt = registrationBLO.GetParameters(code);
List<SelectListItem> positions = new List<SelectListItem>();
foreach (DataRow dr in dt.Rows)
{
positions.Add(new SelectListItem { Text = dr["PARAM_VALUE"].ToString(), Value = dr["PARAM_ID"].ToString() });
}
return Json(positions, JsonRequestBehavior.AllowGet);
}
Model:
public class Registration
{
public int CompanyType { get; set; }
[DataType(DataType.Text)]
[Required(ErrorMessage = "Please select Position")]
public int PositionId { get; set; }
public string PositionName { get; set; }
}
答案 0 :(得分:0)
如果你检查帮助器生成的html,你会看到像
这样的东西<select data-val="true" data-val-number="The field PositionID must be a number." data-val-required="Please select Position" id="PositionID" name="PositionID" class="input-validation-error">....</select>
请注意,第一个data-val-
属性为data-val-number="The field PositionID must be a number."
这是HtmlHelper.GetUnobtrusiveValidationAttributes()
方法的结果,@Html.DropDownListFor()
在内部由data-val-
调用以呈现html。
不引人注意的验证通过解析元素并循环每个"The field PositionID must be a number."
属性来实现第一个&#39;规则&#39;添加的是验证其编号。如果您尝试提交表单并且&#34;请选择位置&#34;选择了选项,验证器响应第一个错误int
(它不会继续检查更多错误并将它们连接起来)
请注意,您的属性为[Required]
,因此实际上并不需要int
(data-val-required
必须始终具有值,因此无论如何都会添加string
。
除非您要将属性更改为$(ddltarget).append($('<option></option>').val('').text('--Please select Position--'));
,否则您看到的是默认行为。
另请注意:当您添加&#39;标签&#39;使用javascript的选项,你应该给它一个&#39; null&#39;否则,它会回复标签&#39;
的文字<option value>--Please select Position--</option>
将生成
.val('')
没有<option>--Please select Position--</option>
,它会生成
"--Please select Position--"
表示将{{1}}张贴回来