public override TagBuilder GenerateValidationMessage( ViewContext viewContext, ModelExplorer modelExplorer, string expression, string message, string tag, object htmlAttributes) { if (viewContext == null) { throw new ArgumentNullException(nameof(viewContext)); } if (string.IsNullOrEmpty(tag)) { tag = viewContext.ValidationMessageElement; } var fullName = NameAndIdProvider.GetFullHtmlFieldName(viewContext, expression); var htmlAttributeDictionary = GetHtmlAttributeDictionaryOrNull(htmlAttributes); var tagBuilder = new TagBuilder(tag); tagBuilder.MergeAttributes(htmlAttributeDictionary); tagBuilder.AddCssClass(_options.ValidationMessageCssClassName); // The span will only appear when there's an error in the error bag for the field . tagBuilder.MergeAttribute("v-show", $"{_options.ErrorBagName}.has('{fullName}')"); tagBuilder.InnerHtml.SetHtmlContent(new HtmlString($"{{{{{_options.ErrorBagName}.first('{fullName}')}}}}")); return(tagBuilder); }
public override void Process(TagHelperContext context, TagHelperOutput output) { context.ThrowIfNull(); output.ThrowIfNull(); var kvList = Data.GetKeyValueList(); var selectListItems = kvList.Select(a => new SelectListItem { Text = a.Key, Value = a.Value.ToString(), Selected = a.Value == (int)(For.Model ?? -1) }).ToList(); if (!DefaultText.IsNullOrEmpty()) { selectListItems.Insert(0, new SelectListItem { Text = DefaultText, Value = "" }); } var tagBuilder = _generator.GenerateSelect(ViewContext, For.ModelExplorer, null, For.Name, selectListItems, null, false, null); output.Content.AppendHtml(tagBuilder); output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; output.Attributes.Add("class", InputDisplay.GetDisplayName()); var idStr = NameAndIdProvider.CreateSanitizedId(ViewContext, For.Name, _generator.IdAttributeDotReplacement); if (Data == null && !Url.IsNullOrEmpty()) { output.PostElement.SetHtmlContent(string.Format(@"<script type='text/javascript'> $(function () {{ $('#{0}').bindSelectData('{1}','{2}'); }}); </script>", idStr, Url, For.Model)); } }
public static TagBuilder GenerateCheckboxBooleanButton(ViewContext viewContext, ModelExplorer modelExplorer, string expression, string text, bool?isChecked, object divHtmlAttributes, object inputHtmlAttributes, object labelHtmlAttributes) { var htmlGenerator = viewContext.HttpContext.RequestServices.GetRequiredService <IHtmlGenerator>(); var name = NameAndIdProvider.GetFullHtmlFieldName(viewContext, expression); var div = new TagBuilder("div"); div.MergeAttributes(GetHtmlAttributeDictionaryOrNull(divHtmlAttributes)); var input = htmlGenerator.GenerateCheckBox(viewContext, modelExplorer, expression, isChecked, inputHtmlAttributes); var inputChecked = input.Render().Contains("checked"); var label = new TagBuilder("label"); label.MergeAttributes(GetHtmlAttributeDictionaryOrNull(labelHtmlAttributes)); if (inputChecked) { label.AddCssClass("active"); } label.InnerHtml.AppendHtml(input); label.InnerHtml.AppendHtml(text); div.InnerHtml.AppendHtml(label); return(div); }
public override void Process(TagHelperContext context, TagHelperOutput output) { base.Process(context, output); if (ViewContext == null || For == null) { return; } var id = NameAndIdProvider.GetFullHtmlFieldName(ViewContext, For.Name); if (!ViewContext.ModelState.TryGetValue(id, out var modelStateEntry)) { return; } if (modelStateEntry.ValidationState != Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Invalid) { return; } output.MergeAttributes(new TagBuilder(output.TagName) { Attributes = { { "class", "is-invalid" } } }); }
/// <inheritdoc /> public virtual TagBuilder GenerateLabel(ViewContext viewContext, string fullName, Column column, string labelText, object htmlAttributes) { if (viewContext == null) { throw new ArgumentNullException(nameof(viewContext)); } if (column == null) { throw new ArgumentNullException(nameof(column)); } var resolvedLabelText = labelText; if (string.IsNullOrEmpty(resolvedLabelText)) { resolvedLabelText = column.DisplayName; } if (string.IsNullOrEmpty(resolvedLabelText)) { resolvedLabelText = column.Name; } var tagBuilder = new TagBuilder("label"); var idString = NameAndIdProvider.CreateSanitizedId(viewContext, fullName, IdAttributeDotReplacement); tagBuilder.Attributes.Add("for", idString); tagBuilder.InnerHtml.SetContent(resolvedLabelText); tagBuilder.MergeAttributes(GetHtmlAttributeDictionaryOrNull(htmlAttributes), replaceExisting: true); return(tagBuilder); }
public static TagBuilder GenerateCheckboxBoolean(ViewContext viewContext, ModelExplorer modelExplorer, string expression, string text, bool?isChecked, object divHtmlAttributes, object inputHtmlAttributes, object labelHtmlAttributes) { var htmlGenerator = viewContext.HttpContext.RequestServices.GetRequiredService <IHtmlGenerator>(); var div = new TagBuilder("div"); div.MergeAttributes(GetHtmlAttributeDictionaryOrNull(divHtmlAttributes)); var name = NameAndIdProvider.GetFullHtmlFieldName(viewContext, expression); var id = NameAndIdProvider.CreateSanitizedId(viewContext, name, htmlGenerator.IdAttributeDotReplacement); var input = htmlGenerator.GenerateCheckBox(viewContext, modelExplorer, expression, isChecked, inputHtmlAttributes); //var checkboxHtml = htmlHelper.CheckBox(expression, isChecked, htmlAttributes).Render().Replace("true", value); var label = new TagBuilder("label"); label.MergeAttributes(GetHtmlAttributeDictionaryOrNull(labelHtmlAttributes)); label.InnerHtml.AppendHtml(text); div.InnerHtml.AppendHtml(input); if (!string.IsNullOrEmpty(text)) { div.InnerHtml.AppendHtml(label); } return(div); }
public override void Process(TagHelperContext context, TagHelperOutput output) { context.ThrowIfNull(); output.ThrowIfNull(); var selectListItems = new List <SelectListItem>(); var kvList = For?.Metadata.EnumGroupedDisplayNamesAndValues; if (kvList != null) { selectListItems = For.Metadata.EnumGroupedDisplayNamesAndValues.Select(a => new SelectListItem { Text = a.Key.Name.ToString(), Value = a.Value.ToString(), Selected = a.Value == ((int)((For.Model) ?? -1)).ToString() }).ToList(); } if (kvList == null && Data != null) { selectListItems = (List <SelectListItem>)Data; } var idStr = NameAndIdProvider.CreateSanitizedId(ViewContext, For.Name, _generator.IdAttributeDotReplacement); var tagBuilder = new StringBuilder(32); selectListItems.ForEach(item => { var attributes = new Dictionary <string, object> { { "title", item.Text }, { "lay-skin", "primary" } }; var inputTagBuilder = _generator.GenerateCheckBox(ViewContext, For.ModelExplorer, For.Name, item.Value == (string)For.ModelExplorer.Model, attributes); tagBuilder.Append(inputTagBuilder.GetString()); }); var outpuHtml = $@" <label class='layui-form-label'>{Text ?? For.Metadata.DisplayName}</label> <div id='{idStr}_checkGroup' class='layui-input-block'> {tagBuilder} </div>"; output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; output.Attributes.Add("class", InputDisplay.GetDisplayName()); output.Attributes.Add("id", $"{idStr}_div"); output.Content.SetHtmlContent(outpuHtml); if (kvList == null && !Url.IsNullOrEmpty()) { output.PostElement.SetHtmlContent($@"<script type='text/javascript'> $(function () {{ $('#{idStr}_checkGroup').bindCheckBoxData('{Url}','{For.Model}','{For.Name}'); }}); </script>"); } }
/// Computes the variant to be unique for each radiobutton. private string VariantId(KeyValuePair <string, string> enumItem) { var fullHtmlFieldName = NameAndIdProvider.GetFullHtmlFieldName(ViewContext, For.Name); return(new StringBuilder() .Append(NameAndIdProvider.CreateSanitizedId(ViewContext, fullHtmlFieldName, _generator.IdAttributeDotReplacement)) .Append(_generator.IdAttributeDotReplacement) .Append(enumItem.Key) .ToString()); }
/// <inheritdoc /> public virtual TagBuilder GenerateSelect( ViewContext viewContext, string fullHtmlFieldName, Column column, string optionLabel, IEnumerable <SelectListItem> selectList, ICollection <string> currentValues, bool allowMultiple, object htmlAttributes) { if (viewContext == null) { throw new ArgumentNullException(nameof(viewContext)); } if (string.IsNullOrEmpty(fullHtmlFieldName)) { throw new ArgumentNullException(nameof(fullHtmlFieldName)); } if (selectList == null) { throw new ArgumentNullException(nameof(selectList)); } var htmlAttributeDictionary = GetHtmlAttributeDictionaryOrNull(htmlAttributes); // Convert each ListItem to an <option> tag and wrap them with <optgroup> if requested. var listItemBuilder = GenerateGroupsAndOptions(optionLabel, selectList, currentValues); var tagBuilder = new TagBuilder("select"); tagBuilder.InnerHtml.SetHtmlContent(listItemBuilder); tagBuilder.MergeAttributes(htmlAttributeDictionary); NameAndIdProvider.GenerateId(viewContext, tagBuilder, fullHtmlFieldName, IdAttributeDotReplacement); tagBuilder.MergeAttribute("name", fullHtmlFieldName, replaceExisting: true); if (allowMultiple) { tagBuilder.MergeAttribute("multiple", "multiple"); } // If there are any errors for a named field, we add the css attribute. if (viewContext.ViewData.ModelState.TryGetValue(fullHtmlFieldName, out var entry)) { if (entry.Errors.Count > 0) { tagBuilder.AddCssClass(HtmlHelper.ValidationInputCssClassName); } } AddValidationAttributes(viewContext, tagBuilder, fullHtmlFieldName, column); return(tagBuilder); }
public override void Process(TagHelperContext context, TagHelperOutput output) { if (ModelExpression != null) { var expression = ModelExpression.Name; var name = NameAndIdProvider.GetFullHtmlFieldName(ViewContext, expression); if (Name == null) { Name = name; } if (Value == null) { Value = (string)AiplugsField.GetModelStateValue(ViewContext, Name, typeof(string)) ?? ModelExpression.ModelExplorer.Model?.ToString(); } } var id = Guid.NewGuid().ToString(); output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; output.Attributes.Add("id", id); output.Attributes.Merge("class", "aiplugs-monaco"); output.Attributes.Add("data-controller", "aiplugs-monaco"); if (!string.IsNullOrEmpty(ValueFrom)) { output.Attributes.Add("data-aiplugs-monaco-value-from", ValueFrom); } if (!string.IsNullOrEmpty(SettingsFrom)) { output.Attributes.Add("data-aiplugs-monaco-settings-from", SettingsFrom); } if (!string.IsNullOrEmpty(JsonSchemas)) { output.Attributes.Add("data-aiplugs-monaco-json-schemas", JsonSchemas); } output.Content.AppendHtml("<div class=\"aiplugs-progress\" data-target=\"aiplugs-monaco.progress\"></div>"); output.Tag("textarea", () => { if (Name != null) { output.Attr("name", Name); } output.Attr("class", "aiplugs-monaco__input"); output.Attr("data-target", "aiplugs-monaco.textarea"); }, Value); }
public static TagBuilder GenerateRadioValue(ViewContext viewContext, ModelExplorer modelExplorer, string expression, bool inline, string value, string text, bool?isChecked, object divHtmlAttributes, object inputHtmlAttributes, object labelHtmlAttributes) { var htmlGenerator = viewContext.HttpContext.RequestServices.GetRequiredService <IHtmlGenerator>(); var name = NameAndIdProvider.GetFullHtmlFieldName(viewContext, expression); // var radioHtml = htmlHelper.RadioButton(expression, value, isChecked, htmlAttributes).Render(); var div = new TagBuilder("div"); div.MergeAttributes(GetHtmlAttributeDictionaryOrNull(divHtmlAttributes)); if (inline) { div.AddCssClass("form-check-inline"); } else { div.AddCssClass("form-check"); } var inputHtmlAttributesDict = GetHtmlAttributeDictionaryOrNull(inputHtmlAttributes) ?? new Dictionary <string, object>(); if (!inputHtmlAttributesDict.ContainsKey("class")) { inputHtmlAttributesDict.Add("class", "form-check-input"); } else { inputHtmlAttributesDict["class"] = inputHtmlAttributesDict["class"] + " " + "form-check-input"; } inputHtmlAttributes = GetAnonymousObject(inputHtmlAttributesDict); var input = htmlGenerator.GenerateRadioButton(viewContext, modelExplorer, expression, value, isChecked, inputHtmlAttributes); //var checkboxHtml = htmlHelper.CheckBox(expression, isChecked, htmlAttributes).Render().Replace("true", value); var label = new TagBuilder("label"); label.MergeAttributes(GetHtmlAttributeDictionaryOrNull(labelHtmlAttributes)); label.InnerHtml.AppendHtml(text); label.AddCssClass("form-check-label"); div.InnerHtml.AppendHtml(input); if (!string.IsNullOrEmpty(text)) { div.InnerHtml.AppendHtml(label); } return(div); }
public override void Process(TagHelperContext context, TagHelperOutput output) { context.ThrowIfNull(); output.ThrowIfNull(); var modelExplorer = For.ModelExplorer; var attributes = new Dictionary <string, object> { { PlaceholderAttributeName, Placeholder ?? modelExplorer.Metadata.Description ?? modelExplorer.Metadata.DisplayName }, { "class", "layui-input" } }; if (modelExplorer.Metadata != null && modelExplorer.Metadata.IsRequired) { attributes["required"] = "required"; } var value = modelExplorer.Model ?? Value; if (value is DateTime) { value = ((DateTime)value).ToString(FormatByType(DateTimeType)); } var inputTagBuilder = _generator.GenerateTextBox(ViewContext, modelExplorer, For.Name, value, Format, attributes); output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; output.Content.SetHtmlContent(inputTagBuilder); output.Attributes.Add("class", InputDisplay.GetDisplayName()); var dateTimeTypeStr = DateTimeType.ToString(); var idStr = NameAndIdProvider.CreateSanitizedId(ViewContext, For.Name, _generator.IdAttributeDotReplacement); output.PostElement.SetHtmlContent(string.Format(@"<script type='text/javascript'> layui.use('laydate', function () {{ var laydate = layui.laydate; laydate.render({{ elem: '#{0}', type: '{1}' }}); }}); </script>", idStr, dateTimeTypeStr)); }
public string GetDomId() { if (Id != null) { return(Id); } if (Name != null) { return(NameAndIdProvider.CreateSanitizedId(ViewContext, Name, "_")); } return(null); }
protected virtual void ExtractFromModelExpression() { if (ModelExpression != null) { var modelExplorer = ModelExpression.ModelExplorer; var expression = ModelExpression.Name; var name = NameAndIdProvider.GetFullHtmlFieldName(ViewContext, expression); if (Id == null) { Id = NameAndIdProvider.CreateSanitizedId(ViewContext, name, "_"); } if (Name == null) { Name = name; } if (Label == null) { var label = modelExplorer.Metadata.DisplayName ?? modelExplorer.Metadata.PropertyName; if (label == null && expression != null) { var index = expression.LastIndexOf('.'); if (index == -1) { // Expression does not contain a dot separator. label = expression; } else { label = expression.Substring(index + 1); } } Label = label; } if (Description == null) { Description = modelExplorer.Metadata.Description; } if (modelExplorer.Metadata.ValidatorMetadata.Any(attribute => attribute is RequiredAttribute)) { Required = true; } } }
public static async Task <IEnumerable <ModelSelectListItem <TModel> > > SelectListForModelTypeAsync <TModel>(this IHtmlHelper htmlHelper, object[] keys, string selectListId = null) where TModel : class, new() { var newhtmlHelper = htmlHelper.For <List <TModel> >(); var fullName = NameAndIdProvider.GetFullHtmlFieldName(newhtmlHelper.ViewContext, ""); var keyArray = keys.Select(key => key.ToString()).ToArray(); newhtmlHelper.ViewContext.ViewData.ModelState.SetModelValue(fullName, keyArray, String.Join(",", keyArray)); var result = await newhtmlHelper.SelectListAsync("", selectListId, keyArray.Length > 0?true : false); if (result != null) { return(result.Cast <ModelSelectListItem>().Select(item => new ModelSelectListItem <TModel>(item))); } return(null); }
private static string GetFullHtmlFieldName(this ViewContext viewContext, string expression, DataSet dataSet, bool isScalar, Column column, DataRow dataRow) { if (dataSet == null) { throw new ArgumentNullException(nameof(dataSet)); } if (column == null) { throw new ArgumentNullException(nameof(column)); } VerifyDataRow(dataRow, column, dataSet, isScalar); var memberName = ResolveMemberName(dataSet, isScalar, column, dataRow); var fullDataSetName = NameAndIdProvider.GetFullHtmlFieldName(viewContext, expression); return(ModelNames.CreatePropertyModelName(fullDataSetName, memberName)); }
public static TagBuilder GenerateRadioValueButton(ViewContext viewContext, ModelExplorer modelExplorer, string expression, string value, string text, bool?isChecked, object inputHtmlAttributes, object labelHtmlAttributes) { var htmlGenerator = viewContext.HttpContext.RequestServices.GetRequiredService <IHtmlGenerator>(); var name = NameAndIdProvider.GetFullHtmlFieldName(viewContext, expression); var inputHtmlAttributesDict = GetHtmlAttributeDictionaryOrNull(inputHtmlAttributes) ?? new Dictionary <string, object>(); if (!inputHtmlAttributesDict.ContainsKey("autocomplete")) { inputHtmlAttributesDict.Add("autocomplete", "off"); } if (!inputHtmlAttributesDict.ContainsKey("class")) { inputHtmlAttributesDict.Add("class", ""); } inputHtmlAttributes = GetAnonymousObject(inputHtmlAttributesDict); var input = htmlGenerator.GenerateRadioButton(viewContext, modelExplorer, expression, value, isChecked, inputHtmlAttributes); var inputChecked = input.Render().Contains("checked"); //var checkboxHtml = htmlHelper.CheckBox(expression, isChecked, htmlAttributes).Render().Replace("true", value); var label = new TagBuilder("label"); label.MergeAttributes(GetHtmlAttributeDictionaryOrNull(labelHtmlAttributes)); label.MergeAttribute("class", "btn btn-outline-secondary mr-2 mb-2 btn-sm", false); if (inputChecked) { label.AddCssClass("active"); } label.InnerHtml.AppendHtml(input); label.InnerHtml.AppendHtml(text); return(label); }
/// <inheritdoc /> /// <remarks>Does nothing if <see cref="For"/> is <c>null</c>.</remarks> public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (output == null) { throw new ArgumentNullException(nameof(output)); } if (For != null) { var fullName = NameAndIdProvider.GetFullHtmlFieldName(ViewContext, For.Name); if (ViewContext.ViewData.ModelState.TryGetValue(fullName, out var entry) && entry.Errors.Count > 0) { TagHelperAttribute classAttribute; if (output.Attributes.TryGetAttribute("class", out classAttribute)) { output.Attributes.SetAttribute("class", classAttribute.Value + " " + HasValidationErrorClassName); } else { output.Attributes.Add("class", HasValidationErrorClassName); } } // We check for whitespace to detect scenarios such as: // <span validation-for="Name"> // </span> if (!output.IsContentModified) { var childContent = await output.GetChildContentAsync(); output.Content.SetHtmlContent(childContent); } } }
public override void Process(TagHelperContext context, TagHelperOutput output) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (output == null) { throw new ArgumentNullException(nameof(output)); } if (this.Name != null) { if (this.Name.Metadata == null) { throw new ArgumentException(nameof(Name)); } string value = NameAndIdProvider.GetFullHtmlFieldName(ViewContext, this.Name.Name); output.Attributes.SetAttribute("name", value); } }
public override void Process(TagHelperContext context, TagHelperOutput output) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (output == null) { throw new ArgumentNullException(nameof(output)); } if (this.Id != null) { if (this.Id.Metadata == null) { throw new ArgumentException(nameof(Id)); } string idFieldName = NameAndIdProvider.GetFullHtmlFieldName(ViewContext, this.Id.Name); string idFieldValue = NameAndIdProvider.CreateSanitizedId(this.ViewContext, idFieldName, _generator.IdAttributeDotReplacement); output.Attributes.SetAttribute("id", idFieldValue); } }
public override void Process(TagHelperContext context, TagHelperOutput output) { context.ThrowIfNull(); output.ThrowIfNull(); var selectListItems = new List <SelectListItem>(); var kvList = For?.Metadata.EnumGroupedDisplayNamesAndValues; if (kvList != null) { selectListItems = For.Metadata.EnumGroupedDisplayNamesAndValues.Select(a => new SelectListItem { Text = a.Key.Name.ToString(), Value = a.Value.ToString() }).ToList(); } if (kvList == null && Data != null) { selectListItems = ((IEnumerable <SelectListItem>)Data).ToList(); } if (!DefaultText.IsNullOrWhiteSpace()) { selectListItems.Insert(0, new SelectListItem { Text = DefaultText, Value = "" }); } var idStr = NameAndIdProvider.CreateSanitizedId(ViewContext, For.Name, _generator.IdAttributeDotReplacement); var attributes = new Dictionary <string, object> { { "xm-select", idStr }, { "xm-select-skin", "default" } }; IList l = new ArrayList(); if (For.Model != null) { l = (IList)For.Model; } selectListItems.ForEach(item => { item.Selected = For.Model != null && l.Contains(item.Value); }); var tagBuilder = _generator.GenerateSelect(ViewContext, For.ModelExplorer, null, For.Name, selectListItems, null, false, attributes); var outpuHtml = $@" <label class='layui-form-label'>{Text ?? For.Metadata.DisplayName}</label> <div class='layui-input-block'> {tagBuilder.GetString().Replace("&nbsp;", " ")} </div>"; output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; output.Attributes.Add("id", $"{idStr}_div"); output.Attributes.Add("class", InputDisplay.GetDisplayName()); output.Content.SetHtmlContent(outpuHtml); var jsValue = l.Cast <object>().Aggregate("", (current, t) => current + (t + ",")).TrimEnd(','); if (kvList == null && !Url.IsNullOrEmpty()) { output.PostElement.SetHtmlContent($@"<script type='text/javascript'> $(function () {{ $('#{idStr}').bindMultiSelectData('{Url}','{jsValue}','{idStr}'); }}); </script>"); } }
public override void Process(TagHelperContext context, TagHelperOutput output) { context.ThrowIfNull(); output.ThrowIfNull(); var modelExplorer = For.ModelExplorer; var attributes = new Dictionary <string, object> { { PlaceholderAttributeName, Placeholder }, { TextAttributeName, Text ?? modelExplorer.Metadata.Description ?? modelExplorer.Metadata.DisplayName }, { "class", "layui-input" } }; if (Disabled) { attributes["Disabled"] = "Disabled"; } var value = modelExplorer.Model ?? Value; var htmlText = !attributes[TextAttributeName].ToStr().IsNullOrWhiteSpace() ? $"<label class='layui-form-label'>{attributes[TextAttributeName]}</label>" : ""; var outpuHtml = $@" {htmlText} <div class='layui-input-inline'> <button id='btn_{For.Name}_up' type='button' class='layui-btn' >上传图片</button> <img class='layui-upload-img' id='{For.Name}_imgs1' src='{value}' style='max-width:200px' /> <p id='{For.Name}_retry'></p> <input id='{For.Name}_imgs2' type = 'hidden' value='{value}' name='{For.Name}'> <div>请上传100px*100px的图片</div> </div>"; var idStr = NameAndIdProvider.CreateSanitizedId(ViewContext, For.Name, _generator.IdAttributeDotReplacement); output.TagName = "div"; output.TagMode = TagMode.StartTagAndEndTag; output.Attributes.Add("class", "layui-form-item"); output.Attributes.Add("id", $"{idStr}_div"); output.Content.SetHtmlContent(outpuHtml); output.PostElement.SetHtmlContent($@" <script type='text/javascript'> $(function () {{ var imageUrl; var $ = layui.jquery; var upload = layui.upload; var uploadInst = upload.render({{ elem: '#btn_{For.Name}_up', url: '/Upload/Img', before: function (obj) {{ obj.preview(function (index, file, result) {{ if (file.size / 1024 / 1024 > 2) {{ layer.msg('上传的图片不能超过1M', {{ icon: 2, time: 2000 }}); return false; }} $('#{For.Name}_imgs1').attr('src', result); }}); }}, done: function (res) {{ if (res.success) {{ if (res.data) {{ imageUrl = res.data; $('#{For.Name}_imgs2').val(imageUrl); }} }} else {{ var demoText = $('#{For.Name}_retry'); demoText.html(""<span style='color: #FF5722;'>上传失败</span> <a class='layui-btn layui-btn-xs demo-reload'>重试</a>""); demoText.find('.demo-reload').on('click', function () {{ uploadInst.upload(); }}); }} }} }}); }}); </script>"); }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (output == null) { throw new ArgumentNullException(nameof(output)); } if (For == null) { throw new ArgumentNullException(nameof(For)); } output.TagName = "label"; TagBuilder tagBuilder = new TagBuilder("label"); bool isRequired = Required ?? For.Metadata.AdditionalValues.TryGetValue("PLRequired", out _); if (isRequired) { tagBuilder.MergeAttribute("class", "label-required"); tagBuilder.MergeAttribute("title", _localizer["Yêu cầu nhập."]); } string fullName = NameAndIdProvider.GetFullHtmlFieldName(ViewContext, For.Name); string idString = NameAndIdProvider.CreateSanitizedId(ViewContext, fullName, optionsAccessor.Value.HtmlHelperOptions.IdAttributeDotReplacement); tagBuilder.Attributes.Add("for", idString); string labelText = For.ModelExplorer.Metadata.DisplayName ?? For.Name ?? For.ModelExplorer.Metadata.PropertyName; tagBuilder.InnerHtml.SetContent(labelText); if (!string.IsNullOrEmpty(DisplayHint)) { TagBuilder builder = new TagBuilder("i"); builder.MergeAttribute("class", "fa fa-question-circle info hellp-hit"); builder.MergeAttribute("data-toggle", "tooltip"); builder.MergeAttribute("data-placement", "top"); builder.MergeAttribute("title", DisplayHint); tagBuilder.InnerHtml.AppendHtml(builder); } output.MergeAttributes(tagBuilder); if (!output.IsContentModified) { TagHelperContent childContent = await output.GetChildContentAsync(); if (childContent.IsEmptyOrWhiteSpace) { if (tagBuilder.HasInnerHtml) { output.Content.SetHtmlContent(tagBuilder.InnerHtml); } } else { output.Content.SetHtmlContent(childContent); } } }
public static TagBuilder GenerateCheckboxValueButton(ViewContext viewContext, ModelExplorer modelExplorer, string expression, string value, string text, bool?isChecked, object inputHtmlAttributes, object labelHtmlAttributes) { var htmlGenerator = viewContext.HttpContext.RequestServices.GetRequiredService <IHtmlGenerator>(); var name = NameAndIdProvider.GetFullHtmlFieldName(viewContext, expression); var id = NameAndIdProvider.CreateSanitizedId(viewContext, name, htmlGenerator.IdAttributeDotReplacement); var input = new TagBuilder("input"); input.MergeAttributes(GetHtmlAttributeDictionaryOrNull(inputHtmlAttributes)); input.MergeAttribute("autocomplete", "off", false); input.MergeAttribute("id", id, true); input.MergeAttribute("name", name, false); input.MergeAttribute("type", "checkbox", true); input.MergeAttribute("value", value, false); if (modelExplorer != null) { if (modelExplorer.Model != null) { isChecked = string.Equals(modelExplorer.Model.ToString(), value, StringComparison.Ordinal); } } if (GetModelStateValue(viewContext, name, typeof(string[])) is string[] modelStateValues) { isChecked = modelStateValues.Any(v => string.Equals(v, value, StringComparison.Ordinal)); } else if (GetModelStateValue(viewContext, name, typeof(string)) is string modelStateValue) { isChecked = string.Equals(modelStateValue, value, StringComparison.Ordinal); } if (isChecked.HasValue && isChecked.Value) { input.MergeAttribute("checked", "checked"); } //var checkboxHtml = htmlHelper.CheckBox(expression, isChecked, htmlAttributes).Render().Replace("true", value); var label = new TagBuilder("label"); label.MergeAttributes(GetHtmlAttributeDictionaryOrNull(labelHtmlAttributes)); label.MergeAttribute("class", "btn btn-outline-secondary mr-2 mb-2 btn-sm", false); if (isChecked.HasValue && isChecked.Value) { label.AddCssClass("active"); } label.InnerHtml.AppendHtml(input); label.InnerHtml.AppendHtml(text); // If there are any errors for a named field, we add the CSS attribute. if (viewContext.ViewData.ModelState.TryGetValue(name, out var entry) && entry.Errors.Count > 0) { input.AddCssClass(HtmlHelper.ValidationInputCssClassName); } AddValidationAttributes(viewContext, input, modelExplorer, expression); return(label); }
/// <summary> /// Generates <input...> element. /// </summary> /// <param name="viewContext">The view context.</param> /// <param name="inputType">The input type.</param> /// <param name="fullHtmlFieldName">The full html field name.</param> /// <param name="column">The column.</param> /// <param name="value">The data value.</param> /// <param name="isChecked">Indicates whether this input is checked.</param> /// <param name="setId">Indicates whether id should be set.</param> /// <param name="isExplicitValue">Indicates whether this value is explicit.</param> /// <param name="format">The string format.</param> /// <param name="htmlAttributes">The HTML attributes dictionary.</param> /// <returns>The tag builder.</returns> protected virtual TagBuilder GenerateInput(ViewContext viewContext, InputType inputType, string fullHtmlFieldName, Column column, object value, bool isChecked, bool setId, bool isExplicitValue, string format, IDictionary <string, object> htmlAttributes) { if (viewContext == null) { throw new ArgumentNullException(nameof(viewContext)); } if (string.IsNullOrEmpty(fullHtmlFieldName)) { throw new ArgumentNullException(nameof(fullHtmlFieldName)); } var inputTypeString = GetInputTypeString(inputType); var tagBuilder = new TagBuilder("input") { TagRenderMode = TagRenderMode.SelfClosing, }; tagBuilder.MergeAttributes(htmlAttributes); tagBuilder.MergeAttribute("type", inputTypeString); tagBuilder.MergeAttribute("name", fullHtmlFieldName, replaceExisting: true); var suppliedTypeString = tagBuilder.Attributes["type"]; if (_placeholderInputTypes.Contains(suppliedTypeString)) { AddPlaceholderAttribute(tagBuilder, column); } if (AllowRenderingMaxLengthAttribute && _maxLengthInputTypes.Contains(suppliedTypeString)) { AddMaxLengthAttribute(tagBuilder, column); } var valueParameter = FormatValue(value, format ?? string.Empty); var usedModelState = false; switch (inputType) { case InputType.CheckBox: var modelStateWasChecked = GetModelStateValue(viewContext, fullHtmlFieldName, typeof(bool)) as bool?; if (modelStateWasChecked.HasValue) { isChecked = modelStateWasChecked.Value; usedModelState = true; } goto case InputType.Radio; case InputType.Radio: if (!usedModelState) { if (GetModelStateValue(viewContext, fullHtmlFieldName, typeof(string)) is string modelStateValue) { isChecked = string.Equals(modelStateValue, valueParameter, StringComparison.Ordinal); usedModelState = true; } } if (isChecked) { tagBuilder.MergeAttribute("checked", "checked"); } tagBuilder.MergeAttribute("value", valueParameter, isExplicitValue); break; case InputType.Password: if (value != null) { tagBuilder.MergeAttribute("value", valueParameter, isExplicitValue); } break; case InputType.Text: default: // The following lines causes problem when valueParameter is a formatted datetime // It can be different from the value get from ModelState. To reproduce, remove // the [SqlDate] attribute of Movie.ReleaseDate property, then Movies/Edit page // will not display ReleaseDate correctly. // Not sure the side effect of bypassing GetModelStateValue though. /* * var attributeValue = (string)GetModelStateValue(viewContext, fullHtmlFieldName, typeof(string)); * if (attributeValue == null) * attributeValue = valueParameter; */ var attributeValue = valueParameter; var addValue = true; object typeAttributeValue; if (htmlAttributes != null && htmlAttributes.TryGetValue("type", out typeAttributeValue)) { var typeAttributeString = typeAttributeValue.ToString(); if (string.Equals(typeAttributeString, "file", StringComparison.OrdinalIgnoreCase) || string.Equals(typeAttributeString, "image", StringComparison.OrdinalIgnoreCase)) { addValue = false; // 'value' attribute is not needed for 'file' and 'image' input types. } } if (addValue) { tagBuilder.MergeAttribute("value", attributeValue, replaceExisting: isExplicitValue); } break; } if (setId) { NameAndIdProvider.GenerateId(viewContext, tagBuilder, fullHtmlFieldName, IdAttributeDotReplacement); } // If there are any errors for a named field, we add the CSS attribute. if (viewContext.ViewData.ModelState.TryGetValue(fullHtmlFieldName, out var entry) && entry.Errors.Count > 0) { tagBuilder.AddCssClass(HtmlHelper.ValidationInputCssClassName); } AddValidationAttributes(viewContext, tagBuilder, fullHtmlFieldName, column); return(tagBuilder); }
/// <inheritdoc /> public virtual TagBuilder GenerateTextArea( ViewContext viewContext, string fullHtmlFieldName, Column column, object dataValue, int rows, int columns, object htmlAttributes) { if (viewContext == null) { throw new ArgumentNullException(nameof(viewContext)); } if (string.IsNullOrEmpty(fullHtmlFieldName)) { throw new ArgumentNullException(nameof(fullHtmlFieldName)); } if (column == null) { throw new ArgumentNullException(nameof(column)); } if (rows < 0) { throw new ArgumentOutOfRangeException(nameof(rows)); } if (columns < 0) { throw new ArgumentOutOfRangeException(nameof(columns)); } var value = string.Empty; if (dataValue != null) { value = dataValue.ToString(); } var tagBuilder = new TagBuilder("textarea"); NameAndIdProvider.GenerateId(viewContext, tagBuilder, fullHtmlFieldName, IdAttributeDotReplacement); var htmlAttributeDictionary = GetHtmlAttributeDictionaryOrNull(htmlAttributes); tagBuilder.MergeAttributes(htmlAttributeDictionary, replaceExisting: true); if (rows > 0) { tagBuilder.MergeAttribute("rows", rows.ToString(CultureInfo.InvariantCulture), replaceExisting: true); } if (columns > 0) { tagBuilder.MergeAttribute("cols", columns.ToString(CultureInfo.InvariantCulture), replaceExisting: true); } tagBuilder.MergeAttribute("name", fullHtmlFieldName, replaceExisting: true); AddPlaceholderAttribute(tagBuilder, column); if (AllowRenderingMaxLengthAttribute) { AddMaxLengthAttribute(tagBuilder, column); } AddValidationAttributes(viewContext, tagBuilder, fullHtmlFieldName, column); viewContext.ViewData.ModelState.TryGetValue(fullHtmlFieldName, out var entry); // If there are any errors for a named field, we add this CSS attribute. if (entry != null && entry.Errors.Count > 0) { tagBuilder.AddCssClass(HtmlHelper.ValidationInputCssClassName); } // The first newline is always trimmed when a TextArea is rendered, so we add an extra one // in case the value being rendered is something like "\r\nHello" tagBuilder.InnerHtml.AppendLine(); tagBuilder.InnerHtml.Append(value); return(tagBuilder); }