如何在CSHTML页面模板中对字符串值执行Trim()操作
解决方案
清理ModelState旧值
控制器中如果先接收了用户提交的原始数据,哪怕你修改了模型属性,ModelState里的旧值会被优先渲染。解决方法是在Trim之后,移除对应字段的ModelState记录:// 针对list[i].value字段,直接移除ModelState中的旧值 ModelState.Remove($"list[{i}].value");这样
EditorFor就会使用你修改后的模型值,而非ModelState里的原始脏数据。在
_TextField模板中直接处理值
你的MyTextBoxFor最终调用的是指定_TextField模板的EditorFor,直接在模板里处理值是最直接的方式。找到_TextField.cshtml,修改输出逻辑:@model string @{ // 清除制表符、换行、回车,再Trim首尾空格 var cleanedVal = Model?.Replace("\t", "").Replace("\n", "").Replace("\r", "").Trim(); } @if ((bool?)ViewData["TextArea"] == true) { <textarea class="@ViewData["DivClass"]" name="@ViewData.TemplateInfo.GetFullHtmlFieldName("")">@cleanedVal</textarea> } else { <input type="text" class="@ViewData["DivClass"]" name="@ViewData.TemplateInfo.GetFullHtmlFieldName("")" value="@cleanedVal" /> }这种方式能确保不管模型值来源如何,最终渲染到页面的都是清理后的内容。
在模型属性的Getter中做自动清理
把清理逻辑封装到模型属性的getter里,确保任何地方获取这个值时都是干净的:private string _value; public string value { get { if (string.IsNullOrWhiteSpace(_value)) return _value; // 清除所有空白控制字符,再Trim首尾 return _value.Replace("\t", "").Replace("\n", "").Replace("\r", "").Trim(); } set => _value = value; }这样从控制器到视图,全程拿到的都是处理好的值,不会出现遗漏。
在
MyTextBoxFor方法中处理值
直接在自定义HtmlHelper方法里获取并清理值,再传递给EditorFor:public static IHtmlString MyTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> ex, object additionalViewData) { var model = html.ViewData.ModelMetadata.Model as TModel; var rawValue = ex.Compile().Invoke(model) as string; if (!string.IsNullOrEmpty(rawValue)) { // 清理值 var cleanedValue = rawValue.Replace("\t", "").Replace("\n", "").Replace("\r", "").Trim(); // 构建新的ViewData传递清理后的值 var viewData = new ViewDataDictionary(html.ViewData) { Model = cleanedValue }; // 合并额外的ViewData参数 if (additionalViewData != null) { foreach (var prop in additionalViewData.GetType().GetProperties()) { viewData[prop.Name] = prop.GetValue(additionalViewData); } } return html.EditorFor(ex, "_TextField", viewData); } return html.EditorFor(ex, "_TextField", additionalViewData); }
内容的提问来源于stack exchange,提问作者DevMD
相关产品推荐
相关产品推荐

