bir ValidatedTextBox bir HtmlHelper oluşturun. Bunu modellerimdeki yansımayı kullanarak yaptım, doğrulama ile tamamen dinamik bir jQuery entegrasyonu yarattım, ancak daha basit bir versiyon böyle çalışacaktı (bu muhtemelen işe yarayacak, ancak durduğu gibi test edilmeyecek).
public static MvcForm BeginClientValidatedForm(this HtmlHelper helper, string formId)
{
HttpResponseBase response = helper.ViewContext.HttpContext.Response;
if (helper.ViewData.ModelState.IsValid)
{
response.Write("<ul class=\"validation-summary-errors\"></ul>\n\n");
}
response.Write(ClientValidationHelper.GetFormValidationScript(formId));
response.Write("\n");
// Inject the standard form into the httpResponse.
var builder = new TagBuilder("form");
builder.Attributes["id"] = formId;
builder.Attributes["name"] = formId;
builder.Attributes["action"] = helper.ViewContext.HttpContext.Request.Url.ToString();
builder.Attributes["method"] = HtmlHelper.GetFormMethodString(FormMethod.Post);
response.Write(builder.ToString(TagRenderMode.StartTag));
return new MvcForm(response);
}
Ve buna karşılık gelen "GetFormValidationScript": iyi bir yer başlatmak için
public static string GetFormValidationScript(string formId)
{
string scriptBlock =
@"<script type=""text/javascript"">
$(document).ready(function() {{
$(""#{0}"").validate({{
meta:""rules"",
onkeyup:false,
onfocusout:false,
onclick:false,
errorClass:""input-validation-error"",
errorElement:""li"",
errorLabelContainer:""ul.validation-summary-errors"",
showErrors: function(errorMap, errorList) {{
$(""ul.validation-summary-errors"").html("""");
this.defaultShowErrors();
}}";
// etc...this is the standard jQuery.validate code.
return string.Format(scriptBlock, formId);
}
public static string ClientValidatedTextbox(this HtmlHelper htmlHelper, string propertyName, IDictionary<string, object> htmlAttributes, string validationType)
{
var cssClassBuilder = new StringBuilder();
cssClassBuilder.Append("text ");
if (htmlAttributes == null)
{
htmlAttributes = new Dictionary<string, object>();
}
else if(htmlAttributes.ContainsKey("class"))
{
cssClassBuilder.Append(htmlAttributes["class"]);
}
switch validationType
{
case "email":
cssClassBuilder.Append(" {rules: {email: true, messages: {email: 'A valid email is required.'}} } ");
break;
}
htmlAttributes["class"] = cssClassBuilder.ToString();
return htmlHelper.TextBox(propertyName, htmlAttributes);
}
güncelleştirmesi: "Önemli: xVal yalnızca ASP.NET MVC 1.0 ile kullanılması önerilir. ASP.NET MVC 2.0 veya sonraki sürümünü kullanıyorsanız, çerçeve istemci tarafı doğrulama mantığı oluşturmak için yerleşik bir desteğe sahiptir. doğrudan model meta verilerden. İsterseniz xVal'i kullanabilirsiniz, ancak aktif olarak geliştirilmeyecek veya desteklenmeyecektir. " –
Sağ; MVC 2.0 + 'da buna ihtiyacınız yok. Cevabım eski ve MVC 1'e dayanıyordu! –
Evet, bir eleştiri değil, sadece değişiklikten haberdar olmayan herkese yardım etmeye çalışıyorum. –