我有具有與其關聯的自定義屬性方法的組列表。它似乎沒有捕獲屏幕上的驗證錯誤。但是在控制器上,它將ModelState.Valid設置爲false。有沒有辦法在視圖中捕捉它,而不必去服務器端,然後捕獲並顯示它? 其他驗證正在工作,所以它不是缺少jquery文件的情況。列表驗證(數據標註)不工作在客戶端
型號:
[RequiredList(ErrorMessage = "The {0} field is required.")]
[Display(Name = "Selected Organization(s)")]
public List<OrganizationDTO> Organizations { get; set; }
自定義屬性:
public class RequiredListAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var list = value as IList;
if (list != null)
{
return list.Count > 0;
}
return false;
}
}
查看:
<div class="form-group">
<div class="controls">
<label class="control-label" for="Selected Groups">Selected Group(s)</label>
<div class="panel panel-default">
<div class="panel-body" style="overflow-y: auto; max-height: 100px; min-height:50px" id="divSelGroups">
@for (int i = 0; Model.Groups!= null && i < Model.Groups.Count(); i++)
{
var group= Model.Groups[i];
var checkedAttr = (group.Id != Guid.Empty) ? "checked='checked'" : "";
<div class="row">
<input type="hidden" name="Groups.Index" value="@i" />
<input type="hidden"name="Groups[@i].Name" value="@group.Name" />
<input type="hidden" name="Groups[@i].Data" value="@group.Data" />
<div class="col-xs-1">
<input type="checkbox" name="Groups[@i].Id" value="@group.Id" @checkedAttr data-org-selected="true" />
</div>
<div class="col-xs-11" data-toggle="tooltip" data-placement="top" title="@group.Data">@group.Name</div>
</div>
}
</div>
</div>
@Html.ValidationMessageFor(m => m.Groups)
</div>
</div>
一個驗證屬性需要實現'IClientValidatable',你需要編寫客戶端驗證jQuery方法。但你不能做到這一點與集合,因爲你不能爲一個集合的形式控制(集合中只有對象的屬性) –
@StephenMuecke但我得到的錯誤在ModelState.Valid。那麼有沒有一種方法可以在視圖本身中捕獲它,而不必等待提交? –
簡答題是否(使用驗證屬性)。但是你可以寫你自己的腳本(處理表單提交事件並檢查數據,如果無效,則取消提交和顯示和錯誤消息) –