我有
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
在我的配置中
Html.EnableClientValidation(true);
Html.EnableUnobtrusiveJavaScript(true);
在我看来和
<script src="~/js/jquery.validate.min.js"></script>
<script src="~/js/jquery.validate.unobtrusive.min.js"></script>
在HTML源代码中(和jQuery一样)(浏览器中没有JS错误)
我有一个带有[Required]
的表单元素,表单元素似乎与关联的data-
属性呈现正常
<div class='form-group'>
<label class="col-md-2 control-label" for="Username">en-gb(Username)</label>
<div class='col-md-10'>
<div class='input-group'>
<div class='input-group-addon'><span class='fa fa-user'></span></div>
<input class="input-validation-error form-control" id="Username" name="Username" type="text" value="" />
</div>
<span class="field-validation-error help-block" data-valmsg-for="Username" data-valmsg-replace="true">en-gb(The en-gb(Username) field is required.)</span>
</div>
</div>
但是没有发生客户端验证;表单始终提交给服务器。
我错过了什么?我应该检查什么?
修改
TextBoxFor
位于System.Web.Mvc.Html.InputHelpers
,并调用TextBoxHelper
,后者又在同一文件中调用InputHelper
。这叫
htmlHelper.GetUnobtrusiveValidationAttributes(name, metadata)
看起来像这样:
public IDictionary<string, object> GetUnobtrusiveValidationAttributes(string name, ModelMetadata metadata)
{
Dictionary<string, object> results = new Dictionary<string, object>();
// The ordering of these 3 checks (and the early exits) is for performance reasons.
if (!ViewContext.UnobtrusiveJavaScriptEnabled)
{
return results;
}
FormContext formContext = ViewContext.GetFormContextForClientValidation();
if (formContext == null)
{
return results;
}
string fullName = ViewData.TemplateInfo.GetFullHtmlFieldName(name);
if (formContext.RenderedField(fullName))
{
return results;
}
formContext.RenderedField(fullName, true);
IEnumerable<ModelClientValidationRule> clientRules = ClientValidationRuleFactory(name, metadata);
UnobtrusiveValidationAttributesGenerator.GetValidationAttributes(clientRules, results);
return results;
}
我遇到的问题是formContext.RenderedField(fullName)
返回true,因此我的input
元素中没有添加验证属性。
答案 0 :(得分:0)
在您的视图中,您是否呈现以下代码?
def WebScrape():
linktoenter = input('Where do you want to scrape from today?: ')
url = linktoenter
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html, "lxml")
if linktoenter in url:
print('Retrieving your links...')
links = {}
n = 0
link_title=soup.findAll('a',{'class':'title'})
n += 1
links[n] = link_title
for eachtitle in link_title:
print(eachtitle['href']+","+eachtitle.string)
else:
print('Please enter another Website...')
假设您正在使用默认项目模板,您需要在视图中包含您要渲染的内容以启用客户端验证...或者,添加@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
在布局文件的底部,以便在所有视图中启用它。
还要确保在Bundles配置文件中定义Scripts.Render("~/bundles/jqueryval")
。
答案 1 :(得分:0)
formContext.RenderedField(fullName)
是一个红色的鲱鱼,我真的不知道那是什么。
问题是我已经将ValidationAttribute
类子类化,以便从数据库而不是resx中提供全局化查找。这意味着它们不会出现在ModelMetadata
。
一种解决方案是在重写的属性上实现接口System.Web.Mvc.IClientValidatable
。但是,基类没有实现这个接口,因此它们必须通过其他一些机制来配置客户端验证 - 而这是另一种不够智能的机制来获取开箱即用的子类{ {1}}秒。