gpt4 book ai didi

c# - 如何验证自定义 ASP.NET MVC 助手

转载 作者:太空狗 更新时间:2023-10-29 23:15:11 26 4
gpt4 key购买 nike

我需要对自定义 ASP.NET MVC 帮助程序进行工作验证。

助手

public static class AutocompleteHelper
{
public static MvcHtmlString AutocompleteFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string actionUrl)
{
return CreateAutocomplete(helper, expression, actionUrl, null, null);
}
public static MvcHtmlString AutocompleteFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string actionUrl, bool? isRequired, string placeholder)
{

return CreateAutocomplete(helper, expression, actionUrl, placeholder, isRequired);
}

private static MvcHtmlString CreateAutocomplete<TModel, TValue>(HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string actionUrl, string placeholder, bool? isRequired)
{
var attributes = new Dictionary<string, object>
{
{ "data-autocomplete", true },
{ "data-action", actionUrl }
};

if (!string.IsNullOrWhiteSpace(placeholder))
{
attributes.Add("placeholder", placeholder);
}

if (isRequired.HasValue && isRequired.Value)
{
attributes.Add("required", "required");
}

attributes.Add("class", "form-control formControlAutocomplete");


attributes.Add("maxlength", "45");


Func<TModel, TValue> method = expression.Compile();
var value = method((TModel)helper.ViewData.Model);
var baseProperty = ((MemberExpression)expression.Body).Member.Name;
var hidden = helper.Hidden(baseProperty, value);

attributes.Add("data-value-name", baseProperty);

var automcompleteName = baseProperty + "_autocomplete";
var textBox = helper.TextBox(automcompleteName, null, string.Empty, attributes);

var builder = new StringBuilder();
builder.AppendLine(hidden.ToHtmlString());
builder.AppendLine(textBox.ToHtmlString());

return new MvcHtmlString(builder.ToString());
}
}

HTML

@Html.AutocompleteFor(x => x.ProductUID, Url.Action("AutocompleteProducts", "Requisition"), true, "Start typing Product name...")
@Html.ValidationMessageFor(x => x.ProductUID)

我似乎要验证,但没有消息出现。 enter image description here

有什么线索吗?

最佳答案

您的文本字段的名称是 ProductUID_autocomplete,但是应该显示错误消息的 ValidationMessageFor 已绑定(bind)到 ProductUID

因此请确保将错误消息绑定(bind)到相同的属性:

@Html.ValidationMessage("ProductUID_autocomplete")

看起来无论您可能必须验证此字段的自定义逻辑是在 ModelState 中的 ProductUID_autocomplete 键下注入(inject)错误。

话虽这么说,为什么不直接调用自定义帮助器中的 ValidationMessage 帮助器呢?这样一来,您在 View 中输入的内容就会减少,那些名称以 _autocomplete 为后缀的逻辑 将只保留在帮助程序中。

关于c# - 如何验证自定义 ASP.NET MVC 助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21121056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com